学习笔记-设计模式入门基础篇-代理模式

代理模式

代理角色,被代理的角色(目标对象),由被代理角色来做最终的决定

代理角色通常来说会持有被代理角色对象的引用

获取到目标对象的引用,并且能够调用到目标类的业务方法

 

静态代理

代理类:获取目标类的引用(具体的类的引用)

目标类:做决定的方法(具体的类);做决定的方法;

代理类

目标类

动态代理

动态代理类:获取目标类的引用(可以是个接口)

目标类:实现接口的类

代理类需要实现 InvocationHandler 类,并实现 invoke方法,方法增强也就是在这个invoke方法里面做;

代理类可以是接口,也可以是普通的类

调用

区别

静态代理,在代理之前,所有的东西都是已知的

动态代理,在代理之前,所有的东西都是未知的

 

Cglib

目标类:普通的类

代理类: implements MethodInterceptor 接口 Override intercept方法

Jdk 中,一般$ 符号开头的类都是自动生成的

 

目标类

代理类

调用:

字节码重组:

  1. 拿到被代理对象的引用,并且获取到它的所有的接口,反射获取
  2. JDK Proxy 类重新生成一个新的类、同时新的类要实现被代理类的所有实现的所有接口
  3. 动态生成java代码,把新加的业务逻辑方法由一定的逻辑代码去调用(代码中体现)
  4. 编译生成新的JAVA代码.class;
  5. 在重新加载到jvm 中运行;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章