关于动态代理的一点体会

代理模式是Java设计模式中的一种,其特征为代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现业务,而是通过调用委托类对象的相关方法来提供具体业务。

在Java中的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和接口可以生成JDK动态代理或动态代理对象。

按照代理的创建时间不同,可以分为两种:

  • 静态代理:手动创建,再对其编译。在程序运行前,代理类的.class文件就已经存在。
  • 动态代理:在程序运行时,通过反射机制动态创建而成。
  • 以上部分转自
  • 关于动态代理的一点体会
  • ------https://blog.csdn.net/longestory/article/details/46317077

在本人看来,动态代理的本质就是多态 的应用。为了了解多态代理你必须要知道为什么要使用动态代理,为什么在设计springMvc,mybatis的诸多源码中都可以看到他的应用,在我看来因为他创建方便,再者代理么,能有一个接口吧所有活干了不也是很轻松么,这也是代理的字面意思吧。代理的本质是执行invoke方法。真实业务类通过使用代理对象的invoke方法来对委托类进行操控。什么意思呢,相当于我向代理明星业务的经纪人发出让明星唱歌的指令,经济人使用invoke,明星就唱歌了。而我不接触明星,这样明星的隐私也保证了。这也是反射的一种体现方式。不必暴露接口也可以使用。通过资料在需要继承proxy类获得有关方法和InvocationHandler构造方法传参的同时,java不能同时继承两个类,我们需要和想要代理的类建立联系,只能实现一个接口。还有一个佐证就是我们需要通过改变代理类的方式影响委托类只能通过接口的形式。明白了原理,方法的使用带入参数即可。