动态代理设计模式,及实现原理
动态代理模式,前提还是代理模式,只是优化了静态代理的一些不足。 比如,静态代理在一对一关系出现时,创建的代理对象较多,代码量也大,可维护性就会稍差,在一对多的代理关系出现是,可扩展性就更差了。 而动态代理,就是在使用时,才去创建代理类和实例,这样就可以通过一个动态代理类解决创建多个静态代理的问题,更灵活了。 当然动态代理的缺点也是有的,就是相比静态代理直接调用目标对象方法,动态代理效率会低,因为它是通过反射机制,间接调用目标方法的。 所以,在讨论动态代理前,需要先说说静态代理,及反射。 先说反射,通常对一个类对象执行操作时,都要先知道它是什么类,是做什么的,然后去实例化 对象进行操作。 但是,反射则是一开始不知道要初始化的类是什么,无法使用new关键字来创建对象。而是在运行时才知道要操作的类是什么,可以在运行时获取类的完整构造,并调用对应的方法,访问属性。 那反射跟运行时类信息(RTTI)有什么区别呢? 运行时类型识别(Run-Time Type Identification),使得可以在程序运行时发现和使用类型信息。 Java有两种方式可以让我们在运行时识别对象和类的信息,一种是RTTI,它假定在编译时已经知道了所有的类型;另一种就是反射,允许在运行时发现和使用类信息。 RTTI的基本使用 package rtti; import java.util.Arrays; import