- Spring 5.x中AOP默认依旧使用JDK的动态代理。
JDK动态代理是基于接口实现的,注入时必须基于接口的多态机制。
CGLIB动态代理则是基于类继承机制来实现的,所以不论是基于接口还是基于实现类的多态注入,都不会出问题。
-
SpringBoot 2.x开始,为了解决使用JDK动态代理可能导致的类型转化异常,进而导致的事务失效等问题,而默认切换为了CGLIB来实现。
-
在 SpringBoot 2.x中,如果需要默认使用JDK动态代理可以通过配置项
spring.aop.proxy-target-class=false
来进行修改,proxyTargetClass
配置已无效。
注意:所以需要先考虑框架的版本。