架构师培训:Spring AOP的原理

2020年11月22日 17:11

45

    SpringAOP,SpringMVC,这两个应该是国内面试的问题,在线上有很多答案,实际上你可以背诵它们。但是今天,我将带大家用简单的语言解释源代码,并了解他的原则。为了使印象更加令人印象深刻,在面试中很容易做到。


    SpringAOP原理


    简要谈谈AOP的设计:


    每个bean将由JDK或Cglib代理。取决于是否有接口。


    每个Bean将具有多个“方法拦截器”。注意:拦截器分为两层,外层由Spring内核控制,内层拦截器由用户设置,即AOP。


    调用代理方法时,它首先通过外部拦截器,然后外部拦截器根据方法的各种信息来判断该方法应执行哪个“内部拦截器”。内部拦截器的设计是责任连接的设计。


    是不是贼简单。


    可以将AOP分成2个部分来扯,哦,不,来分析。。。


    第一:代理的创建;


    第二:代理的调用。


    注意:我们尽量少贴代码,尽量用文字叙述,因为面试的时候,也是文字叙述,不可能让你把代码翻出来的。。。所以,这里需要保持一定的简洁,想知道细节,看interface21源码,想知道的更细,看SpringFramework最新的master分支代码。


    代码位置:com.interface21.aop包下。


    开始分析(扯):


    代理的创建(按步骤):


    首先,需要创建代理工厂,代理工厂需要3个重要的信息:拦截器数组,目标对象接口数组,目标对象。


    创建代理工厂时,默认会在拦截器数组尾部再增加一个默认拦截器——用于最终的调用目标方法。


    当调用getProxy方法的时候,会根据接口数量大余0条件返回一个代理对象(JDKorCglib)。


    注意:创建代理对象时,同时会创建一个外层拦截器,这个拦截器就是Spring内核的拦截器。用于控制整个AOP的流程。


    代理的调用


    当对代理对象进行调用时,就会触发外层拦截器。


    外层拦截器根据代理配置信息,创建内层拦截器链。创建的过程中,会根据表达式判断当前拦截是否匹配这个拦截器。而这个拦截器链设计模式就是职责链模式。


    当整个链条执行到最后时,就会触发创建代理时那个尾部的默认拦截器,从而调用目标方法。最后返回。


    题外话:Spring的事务也就是个拦截器。


    来张不是很标准的UML图:

架构师培训


    关于调用过程,来张流程图:

架构师培训


    大概就是这样子,具体更多的细节,请看源码,如果还不是很明白的话,请咨询本人,本人不确定这个图是否画的很浅显易懂——最起码萌新看得懂才能称之为浅显易懂。


相关推荐:【鲁班学院】java高级培训-能懂系列之Map详解


更多鲁班学院java高级培训免费课程试听地址https://www.lubanjava.com/course.html

鲁班学院java高级培训课程https://www.lubanjava.com/course/detail/519.html

加群即可领取鲁班学院最新Java高级培训课程资料学习包 群号:700541970



在线咨询
免费试听
领取优惠
加群交流

扫一扫
加群领取架构师资料

售后反馈
返回顶部