JAVA里class文件加载分为两种情况,一种class文件的类型是已知的,编译器在编译的时候会把文件打开检查。第二种从别的地方得到了一个引用,然后动态地将这个未知类型的引用对象的.class文件加载进jvm虚拟机里。
java里提供了一个reflect的库,这个库里封装了Method,Constructor,field, Proxy, InvocationHandler
https://www.cnblogs.com/gonjan-blog/p/6685611.html
代理模式:为其他对象提供一种可以控制的访问模式。
1、抽象角色:声明真实对象和代理对象需要实现的接口
2、代理角色:代理对象内部含有对真实对象的引用,从而可以操纵真实对象。同时代理对象具有与真实对象相同的接口,以便在任何时刻都可以替代真实对象。同时代理对象可以在执行真实对象的操作时附加其他的操作。
3、实现抽象角色真实类的对象。
动态代理:代理类在程序运行时被创建。
动态代理的优势在于可以很方便地对代理类函数进行统一处理。
reflect包下提供了一个Proxy类和InvocationHandler接口
创建一个InvocationHandler对象:
创建一个与代理对象相关联的InvocationHandler
生成的代理类,Proxy0 extends Proxy implements Person。生成的代理类继承了Proxy,JAVA动态代理只能对接口进行代理。
CGLIB
生成的代理类继承被代理类,
方法调用不通过反射完成,而是直接调用方法的引用。
https://www.jianshu.com/p/9a61af393e41?from=timeline&isappinstalled=0