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详解