标签:code 讲解 intercept lis 领导 图片 dynamic cto 顺序
此文主要是对于spring中AOP实现的一些思考总结 图。
一、先认识两个AOP功能类
1、根据一个表达式判断一个Method是否匹配。
2、根据拦截类类名和拦截器的方法名,获取指定拦截器方法Method。(拦截器即Advice)
二、讲解一个策略ReflectiveMethodInvocation(重要!重要!重要!)
一个可以实现按一定规则(before、afterReturning、afterThrowing等)链式调用增强方法的策略ReflectiveMethodInvocation。如下图:
可以这样理解:
假设有这么一个公司:有员工A(一个小伙子)、B(一枚美女)和领导。
其中:A有工作任务before[代号invokeAdviceMethod:before]、B有工作任务after[代号invokeAdviceMethod:after],领导有一个会议target[代号invokeJoinpoint]。
时间顺序是:before-target-after。
那么今天的故事就是这样的:
领导问A:"小伙子今天的事情做完了吗?"。A调用before,然后调用proceed()告诉领导说:"我做完了";
领导问B:"美女,今天的事情做完了吗?"。B调用proceed(),告诉领导说:"还没有呢,一会儿才能玩";
领导说:"好吧好吧,没事,那我们先开会吧",然后调用target,开始会议;
会议结束后,领导对美女B说:"赶紧把今天的事情做完我们就下班了"。B这才调用after。过了一会儿,B的工作也做完了。
---到此,故事也已经接近尾声了---
美女走到领导跟前,对领导说:"今天的任务已经完成了",领导说:"好的,那你下班吧"。美女:"拜拜"。
领导走到小伙子跟前,说:"今天的事情已经全部完成了,下班吧"。小伙子陷入了沉思.......
三、AopProxyFactory
对以上的封装:
AopConfig<-AopConfigSupport:包含有:advice拦截器集合、target目标对象。
主要作用是提供一个方法:通过指定的方法获取其匹配的拦截器集合List<MethodInterceptor>。封装到DynamicAdvisedInterceptor中,最终传递给ReflectiveMethodInvocation去链式处理。
最终封装到AopProxyFactory中,如下图所示:
标签:code 讲解 intercept lis 领导 图片 dynamic cto 顺序
原文地址:https://www.cnblogs.com/zomicc/p/12247992.html