背景
平常写代码很多时候都是copy代码,这样很不利于我们去理解背后的知识和逻辑。只有了解了概念及其逻辑才能迅速运用到新的知识领域中。
今天就来梳理spring拦截器背后概念和原理。
整体概念
想象你的程序有如下程序执行流 (A -> B| C-> D),我想不修改以后代码的情况下增加某一项功能 。在这里意思就是在A ->B和C->D中间统一打印log,这就类似于在程序代码中切了一刀进行拦截。
其拦截结果类似于:
{
A...
log.()
B...
}
{
C...
log.()
D...
}
我们可以把上面逻辑想象成如下画面:
![](https://img.haomeiwen.com/i4011138/ffb2365230198a6f.png)
一刀从程序中间拦腰切断形成一个切面,这个切面我们称之为aspect;在这个切面上干什么事情就成为advisor;
切面在程序的拦截点就称为pointcut;advisor在pointcut上所具有的行为有around,before,after等。
所以我们在xml配置文件中把上述的概念及其关系表现出来:
<bean id="advisorId" class = "com.loginterceptor">
<aop:config>
<aop:pointcut id = "pointcutId" expression="executing(* com.facishare.sail.*.*.*(..)"></aop:pointCut>
<aop:advisor pointcut-ref= "pointcutId" adivice-ref="advisorId">
</aop:config>
网友评论