@Aspectj aop精髓

Springboot 启动时会扫描autoconfigure jar包中的META-INFO中spring.factories中的EnableAutoConfiguration注解下的AopAutoConfiguration类

AopAutoConfiguration类会根据springboot的spring.aop.auto和spring.aop.proxy-target-class的属性(高版本默认cglib)去选择加载AopAutoConfiguration

AopAutoConfiguration上的@EnableAspectJAutoProxy注解会被自动加载,所以不需要配置@EnableAspectJAutoProxy

@EnableAspectJAutoProxy被加载后,会自动加载AspectJAutoProxyRegistrar类,AspectJAutoProxyRegistrar里的AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)这行代码用来自动加载AnnotationAwareAspectJAutoProxyCreator类的BeanDefinition然后读取proxyTargetClass和exposeProxy的值,并且设置到BeanDefinition中去

AbstractAutowireCapableBeanFactory里init时会调用applyBeanPostProcessorsAfterInitialization(或者applyBeanPostProcessorsBeforeInitialization)时会遍历到AnnotationAwareAspectJAutoProxyCreator然后调用AbstractAutoProxyCreator中前后切面的方法,然后wrapIfNecessary(因为spring的缓存中还没有这个对象)然后在调用createProxy创建代理对象

createProxy中会根据AnnotationAwareAspectJAutoProxyCreator的属性新建ProxyFactory并且设置advisors,然后调用getProxy

getProxy方法就是根据DefaultAopProxyFactory里createAopProxy返回的JdkDynamicAopProxy的AopProxy方法还是ObjenesisCglibAopProxy的AopProxy
去getProxy返回创建的代理类

最后创建
JdkDynamicAutoProxyConfiguration或者CglibAutoProxyConfiguration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值