SpringAOP(1)-spring源码详解(六)
创始人
2024-02-06 22:12:49
0

上篇文章说了spring监听器,监听event,先把事件全部存储在多播器,通过publicEvent来触发多播器发送事件,他可以通过代码注解,或者实现接口的方式来实现事件监听,达到解耦和异步的效果。

Spring监听器-spring源码详解(五)icon-default.png?t=M85Bhttps://blog.csdn.net/ke1ying/article/details/127780075

Aop要实现的是在我们原来的代码基础上进行一些包装,比如在方法执行前,方法抛出异常之后进行拦截处理,又叫增强处理。与前面ioc的一些后置处理器构造方法不同,aop主要是动态代理来实现的。

SpringAop是基于动态代理,当使用接口的时候是jdk动态代理实现,不是则是用cglib来实现。(cglb是通过asm开源框架动态修改底层字节码,修改需要被增强的.class)

Spring主要用到aspect切点解析,注解。

除了上面的@aspct来增强外,还可以通过实现interceptor的方式来做一些增强。

@Aspect,@Before,@after

拿到所有bean定义,是不是标记了@aspect,每个通知都会生成一个advisor。里面有advise

和pointcut。

那倒是所有advisors之后,pointcut然后matches创建动态proxy。

 

通过@EnableAspectJAutoProxy可以注册一个bean定义。

解析切面的第一步就是在postProcessorBeforeInstiation里。

 

 

 

 

创建动态代理AbstractAutoProxyCreator里的后置处理器。

判断是否直接跳过,跳过的规则是,判断是不是切面类,通知类,切点类,advice,pointcut,advisor等,如果是,则返回true。

当findCandidateAdvisors找不到的时候,会调用buildAspectJAdvisors方法解析所有的切面。

在这里会循环Object的bean定义,也就是拿到所有beanName,判断是不是aspect切面。

主要通过判断findAnnotation 是否标记aspect注解。

这里有个回调钩子方法,会把pointCut注解的忽略掉,没有则加到methods里面去。

这里会有一个sort排序,为什么排序呢,因为后面会根据责任链调用。

Around,before,after,afterReturning,afterTrowing。

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...