spring aop代理

两种代理方式 jdk自带的代理和第三方API接口的CGLIB代理

如果代理目标类是接口的实现类,那么默认是jdk动态代理
如果代理目标类没有实现接口,那么默认是CGLIB代理方式。
CGLIB代理方式要实现implements MethodInterceptor接口。
Spring是采用CGLIB去代理,而采用此方式代理,是不可以面向接口编程的,也就是说要代理的类不可以实现接口,而且要想正常使用貌似还要加上一个默认构造函数.
可通过配置来强制使用cglib代理方式
对静态代理、JDK动态代理、CGLib动态代理做一个总结,静态代理的维护成本比较高,有一个被代理类就需要创建一个代理类,而且需要实现相同的接口。JDK动态代理模式和CGLib动态代理的区别是JDK动态代理需要被代理类实现接口,而CGLib则是生成被代理类的子类,要求被代理类不能是final的,因为final类无法被继承。

你可能感兴趣的:(框架)