设计 模式的分类
Java互联网企业架构技术VIP课程【腾讯课堂每特】java
提娶马:xb2k 设计模式
课程内容缓存
站在架构角度,基于装饰模式纯手写设计多级缓存框架架构
本节课须要知识:动态代理技术+Aop+装饰模式+Redis缓存概念app
注意:由于该设计模式比较接近真实案例,须要有SpringBootV(cmL46679910)基础。框架
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。ide
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式函数
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。工具
完全搞懂代理模式实现原理代理模式主要对咱们方法执行以前与以后实现加强源码分析
静态代理须要本身人工编写代理类代码
public class OrderServiceProxy implements OrderService{
public interface OrderService {
public class Test001 {
|
public class OrderServiceProxy extends OrderServiceImpl {
|
动态代理不须要写代理类对象,经过程序自动生成,而静态代理须要咱们本身写代理类对象。
动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪个对象。
动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成 。
JDK动态代理的通常步骤以下:
1.建立被代理的接口和类;
2.实现InvocationHandlerV(cmL46679910)接口,对目标接口中声明的全部方法进行统一处理;
3.调用Proxy的静态方法,建立代理类并生成相应的代理对象;
实现原理:利用拦截器机制必须实现InvocationHandler接口中的invoke方法实现对
咱们的目标方法加强。
public class JdkInvocationHandler implements InvocationHandler {
|
public class JdkInvocationHandler implements InvocationHandler {
|
JdkInvocationHandler jdkInvocationHandler = new JdkInvocationHandler(new OrderServiceImpl());
|
加上该代码:
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
|
注意:继承了Proxy类,实现了代理的接口,因为java不能多继承,这里已经继承了Proxy类了,不能再继承其余的类,因此JDK的动态代理不支持对实现类的代理,只支持接口的代理。
思路分析:
public class $Proxy0 implements com.mayikt.service.OrderService {
|
public class MyJdkInvocationHandler implements MayiktJdkInvocationHandler { } |
MyJdkInvocationHandler myJdkInvocationHandler = new MyJdkInvocationHandler(new OrderServiceImpl()); |
public class MyProxy {
|
|
public class MyJdkInvocationHandler implements MayiktJdkInvocationHandler {
|
利用asm字节码技术,生成子类实现对目标方法实现加强
<dependencies> |
public class CglibMethodInterceptor implements MethodInterceptor {
|
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\code");
|
Cglib依赖于ASM字节码技术,直接生成class文件,在采用类加载器读取到程序中,
使用fastclass对被代理类的方法创建索引文件不须要依赖于反射查找到目标方法,因此效率比Jdk动态代理要高。
public class OrderServiceImpl$$EnhancerByCGLIB$$1dd3a71c extends OrderServiceImpl {
|
public class MayiktFastclass {
|