共计 1582 个字符,预计需要花费 4 分钟才能阅读完成。
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、切面告诉:就是封装织入代码片段的回调办法;
(呈现 MethodInvocation 动画)
5、MethodInvocation:负责执行拦截器链,在 proceed()办法中执行;
(呈现 MethodInterceptor 动画)
6、MethodInterceptor:负责执行织入的代码片段,在 invoke()办法中执行。
都看到这里了,你还感觉 Spirng AOP 原理难吗?我再送给大家一张精简版的 Spring AOP 执行流程图,须要的小伙伴立马关注点个赞。
如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源。关注微信公众号『Tom 弹架构』可获取更多技术干货!
往期视频曾经整顿成文档模式,须要的小伙伴点个关注,增加下方名片!