代理模式学习

1. 参考连接

  1. Java的三种代理模式

2. 知识点理解

1. 为什么使用代理模式

如下引用连接中的一段话,写的很精辟:java

咱们在写一个功能函数时,常常须要在其中写入与功能不是直接相关但颇有必要的代 码,如日志记录,信息发送,安全和事务支持等,这些枝节性代码虽然是必要的,但它会带来如下麻烦:编程

  1. 枝节性代码游离在功能性代码以外,它不是函数的目的,这是对OO是一种破坏segmentfault

  2. 枝节性代码会形成功能性代码对其它类的依赖,加深类之间的耦合,可重用性下降安全

  3. 从法理上说,枝节性代码应该监视'着功能性代码,而后采起行动,而不是功能性代码 通知'枝节性代码采起行动,这比如吟游诗人应该是主动记录骑士的功绩而不是骑士主动要求诗人记录本身的功绩函数


2. 代理的做用或实现的目的

  1. 为其余对象提供一个代理以控制对某个对象的访问,即经过代理对象访问目标对象.
  2. 好处是:能够在目标对象实现的基础上,加强额外的功能操做,即扩展目标对象的功能.
  3. 编程思想:不要随意去修改别人已经写好的代码或者方法,若是需改修改,能够经过代理的方式来扩展该方法

3. java的三种代理

  1. 静态代理:源码中在代理类的构造方法中生成真实类对象
  2. 动态代理:JDK中经过反射机制
  3. Cglib代理:底层为ASM,子类代理,上述两种是接口代理
在Spring的AOP编程中:
若是加入容器的目标对象有实现接口,用JDK代理
若是目标对象没有实现接口,用Cglib代理

详情请参见参考连接。代理

相关文章
相关标签/搜索