JAVA反射与动态代理知识整理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值