1.jdk动态代理总结:
1.java 动态代理是使用java.lang.reflect包中的proxy类与invocationHander接口这俩来完成
2.要使用jdk 动态代理,委托必须要定义接口
3.jdk动态代理将拦截所有public的方法(因为只能调用接口中的定义方法)这样即使在接口中添加了新的方法。不用修改代码也能拦截
4.动态代理的最小单位是类*(所有类中的方法都会被处理),如果想要拦截一部分的方法,可以在invoke方法中对要执行的方法名进行判断
4.CGLIB动态代理
1.CGLIB可以生成委托类的子类,并重写父类中的非final修饰的方法
2.要求类不能是final的,要拦截的方法也要是非fianl,非static ,非private的
3.动态代理的最小单位是类
关于性能
jdk动态代理基于实现接口的,CGLIB和javassit是基于委托类的
从性能上考虑:javassit > CGLIB > JDK
Struct2的拦截器和Hibernate延迟加载,采用的是javassit的方式
对接口创建代理优于对类创建代理,因为会产生更加松耦合的系统,也符合面向接口编程规范,所以优先考虑jdk动态代理。
网友评论