Spring(5) -(12)动态代理的总结

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动态代理。

你可能感兴趣的:(Spring(5) -(12)动态代理的总结)