一、反射机制
反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类和对象,比如获取某个对象的定义,获取类声明的属性或方法,调用方法或者构造对象,甚至可以运行时修改类的定义。
反射最大的作用之一就在于我们可以不在编译时知道某个对象的类型,而在运行时通过提供完整的“包名+类名.class”得到。
反射的功能:
①在运行时能判断任意一个对象所属的类;
②在运行时能构造任意一个类的对象;
③在运行时判断任意一个类所具有的成员变量和方法;
④在运行时调用任意一个对象的方法。
二、动态代理
动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制。首先,它是一个代理机制。代理可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成。
三、反射机制及其演进
反射提供的AccessibleObject.setAccessible(boolean flag),它的子类也大都重写了这个方法,这里所谓的accessible可以理解成修饰成员的public、protected、private,这意味着我们可以在运行时修改成员访问限制。
四、JDK Proxy的优势
①最小化依赖关系,减少依赖意味着简化开发和维护,JDK本身的支持,可能比cglib更加可靠;
②平滑进行JDK版本升级,而字节码类库通常需要进行更新以保证在新版Java上能够使用;
③代码实现简单。
五、基于类似cglib框架的优势
①有的时候调用目标可能不便实现额外接口,从某种角度看,限定调用者实现接口是有些侵入性的实践,类似cglib动态代理就没有这种限制;
②只操作我们关心的类,而不必为其他相关类增加工作量;
③高性能。
六、AOP(面向切面编程)
AOP通过(动态)代理机制可以让开发者从这些繁琐事项中抽身出来,大幅度提高了代码的抽象程度和复用度。
day05Java核心技术36讲(谈谈Java反射机制、动态代理是基于什么原理)
最新推荐文章于 2023-06-22 19:54:38 发布