image
JDK⽣成的代理对象 的 类型 没有 这两个注解 所以 不需要处理。
cglib
cglib采⽤继承被代理类的⽅式, 是可以溯源 到 ⽗类(被代理类) 去 注解@Controller 注解的。所以这⾥ ⽣成接⼝映射 是 正常运⾏的。404页面网站源码
image
springboot默认选择jdk 还是 cglib。
在springboot⾥,⼀切都是⾃动配置的。那么默认的aop代理⽅式是jdk还是cglib呢。
其实在平时⼯作中,如果有实现 过 利⽤aop实现接⼝⽇志的功能的话,就可以发现这种情况下 选择cglib。否则,在⽆任何⾃定义配置的情况下,jdk⽣成的代理对象是⽆法对controller正常建⽴映射关系的。
源码 :
aop⾃动配置
看默认的配置 spring-boot-autoconfigure包下的jar包下的META-INF下的spring,factories ⾃动配置⼯⼚。
image
key为 org.springframework.boot.autoconfigure.EnableAutoConfiguration下的value值为org.springframework.boot.autoconfigure.aop.AopAutoConfiguration。
springboot的spi机制会 加载EnableAutoConfiguration对应的value的所有类。
image
image
可以看到,
利⽤@ConditionalOnProperty注解, 当配置⽂件中不指定spring.aop.proxy-target-class 或者指定spring.aop.proxy-target-class为true时,默认注册是CglibAutoProxyConfiguration。
当 设置spring.aop.proxy-target-class为false时,注册的是 JdkDynamicAutoProxyConfiguration。
CglibAutoProxyConfiguration类将@EnableAspectJAutoProxy的proxyTargetClass设置成true,上⾯的JdkDynamicAutoProxyConfiguration设置的proxyTargetClass 是false。
当代理⽅式的选择
看ateProxy 这个⽅法,为 bean⽣成代理。
创建代理⼯⼚ProxyFactory
ProxyFactory的proxyTargetClass 不⼿动配置为true
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论