Spring5及SpringBoot2的动态代理实现策略

  1. Spring 5.x中AOP默认依旧使用JDK的动态代理。

JDK动态代理是基于接口实现的,注入时必须基于接口的多态机制。
CGLIB动态代理则是基于类继承机制来实现的,所以不论是基于接口还是基于实现类的多态注入,都不会出问题。

  1. SpringBoot 2.x开始,为了解决使用JDK动态代理可能导致的类型转化异常,进而导致的事务失效等问题,而默认切换为了CGLIB来实现。

  2. 在 SpringBoot 2.x中,如果需要默认使用JDK动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。

注意:所以需要先考虑框架的版本。

posted @ 2021-10-24 21:09  JaxYoun  阅读(324)  评论(0编辑  收藏  举报