被面试官问烂的Spring AOP原理,你是怎么答的?

语言: CN / TW / HK

Spring AOP在Spring体系中深不可测,Spring AOP原理也是经常在互联网大厂面试时被问到,今天,我给大家抽丝剥茧,详细到你无法想象。我划分为四个阶段给大家介绍:创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段。

我整理了一张完整的Spring AOP设计原理UML图,需要高清图的小伙伴可以私信我。

下面详细介绍每个阶段的执行细节。

1、第一阶段:创建代理对象阶段

在Spring中,创建Bean实例都是从getBean()方法开始的(出现getBean()动画),在实例创建之后,Spring容器将根据AOP的配置去匹配目标类的类名,看目标类的类名是否满足切面规则。如果满足满足切面规则,就会调用ProxyFactory创建代理Bean并缓存到IoC容器中。(出现调用ProxyFactory创建代理Bean动画)根据目标对象的自动选择不同的代理策略。(出现选择代理策略动画)如果目标类实现了接口,Spring会默认选择JDK Proxy,如果目标类没有实现接口,Spring会默认选择Cglib Proxy,当然,我们也可以通过配置强制使用Cglib Proxy。

2、第二阶段:拦截目标对象阶段

当用户调用目标对象的某个方法时,(出现AopProxy对象拦截)将会被一个叫做AopProxy的对象拦截,Spring将所有的调用策略封装到了这个对象中,它默认实现了InvocationHandler接口,也就是调用代理对象的外层拦截器。(出现调用InvocationHandler的invoke()方法动画)在这个接口的invoke()方法中,(出现触发MethodInvocation的proceed()方法动画)会触发MethodInvocation的proceed()方法。在这个方法中会按顺序执行符合所有AOP拦截规则的拦截器链。

3、第三阶段:调用代理对象阶段

Spring AOP拦截器链中的每个元素被命名为MethodInterceptor,(出现反射调用Advice对象

动画)其实就是切面配置中的Advice通知。这个回调通知可以简单地理解为是新生成的代理Bean中的方法。(出现执行织入代码动画)也就是我们常说的被织入的代码片段,这些被织入的代码片段会在这个阶段执行。

4、第四阶段:调用目标对象阶段

MethodInterceptor接口也有一个invoke()方法,(出现执行MethodInterceptor的invoke()方法动画)在MethodInterceptor的invoke()方法中会触发对目标对象方法的调用,也就是反射调用目标对象的方法。(出现调用目标对象动画)

Spring AOP原理就分析到这里,最后,总结一下不迷路:

1、代理对象:就是由Spring代理策略生成的对象;

2、目标对象:就是我们自己写的业务代码;

3、织入代码:就是要在我们自己写的业务代码增加的代码片段;

4、切面通知:就是封装织入代码片段的回调方法;

5、MethodInvocation:负责执行拦截器链,在proceed()方法中执行;

6、MethodInterceptor:负责执行织入的代码片段,在invoke()方法中执行。

都看到这里了,你还觉得Spirng AOP原理难吗?我再送给大家一张精简版的Spring AOP执行流程图,需要的小伙伴立马关注点个赞。

我是被编程耽误的文艺Tom,如果大家还有其他疑问,可以在评论区留言。如果本次面试解析对你有帮助,请动动手指一键三连分享给更多的人。关注我,面试不再难!

S信【Tom】或【666】即可免费领取需要更多干货内容,还有海量面试资料,只弹干货不惨水!

本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!\ 如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom弹架构 』可获取更多技术干货!

我是被编程耽误的文艺Tom