Spring依赖注入时,什么时候会创建代理类
用到的代码地址:https://github.com/mxsm/spring-sample/tree/spring-5.3.x/spring-proxy
1. 现象
第一种情况:
第二种情况:
第三种情况:
2. 现象说明
第一种是最常见的在普通的Spring应用中,会发现 UserService
和 TeacherService
都没有创建代理。这个就是最常见的使用方式。
第二种是使用了 @EnableAspectJAutoProxy
注解开启了Spring AOP, 发现**UserService
** 使用的是JDK代理,TeacherService
使用的是CGLIB代理
第三种是使用了 @EnableAspectJAutoProxy(proxyTargetClass = true)
,会发现 UserService
和 TeacherService
都使用的是CGlib代理
现象总结:在没有开启AOP的情况下是不会创建代理的,在使用了 @EnableAspectJAutoProxy
默认的情况下接口的代理使用的是JDK代理实现,类的代理使用的CGLIB(jdk不能实现类的代理)。 @EnableAspectJAutoProxy(proxyTargetClass = true)
强制使用CGLIB代理。