spring aop 理论知识

术语


通知(Advice)

切面的功能被称为Advice(通知),它定义了切面是什么及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。它应用在某个方法被调用之前?之后?之前和之后?或是只在方法抛出一个异常时?

连接点(Joinpoint)

Joinpoint是在程序执行过程中能够插入切面的一个点。这个点可以是方法被调用时、异常被抛出时、甚至字段被编辑时。切面代码可以通过这个点插入到程序的一般流程中,从而添加新的行为。

切入点(Pointcut)

切入点可以缩小切面通知的连接点的范围。如果说advice定义了切面的“什么”和“何时”,那么切入点就定义了“何地”。切入点的定义匹配advice要织入的一个或多个连接点。我们通常使用明确的类和方法名称,或是利用正则表达式定义匹配的类和方法名称模板来指定这些切入点。有些AOP框架允许创建动态切入点,可以根据运行时的状态(比如方法的参数值)来应用通知。

切面(Aspect)

切面就是通知和切入点的结合。通知和切入点共同定义了关于切面的全部内容——它的功能、在何时和何地完成其功能。

目标(Target)

“目标”是被通知的对象,它可以是我们编写的一个对象,或第三方对象。如果没有AOP,这个对象就必须包含自己的主要逻辑和交叉事务的逻辑。通过使用AOP,目标对象就可以着重于自己的主要逻辑,不必考虑要被应用的任何通知。

代理(Proxy)

代理是向目标对象应用通知之后被创建的对象。对于客户对象来说,目标对象(AOP之前)和代理对象(AOP之后)是一样的——它们就应用是这样的。这样一来,程序的其他部分就不必修改对代理对象的支持。

织入(Weaving)

织入是把切面应用到目标对象来创建新的代理对象的过程。切面在指定连接点织入到目标对象。在目标对象的生命周期里有多个时机可以发生织入过程:
  • 编译时:切面在目标类编译时被织入。这需要特殊的编译器,AspectJ在织入编译器就以这种方式织入切面。
  • 类加载时:切面在目标类加载到JVM时被织入。这需要特殊的ClassLoader,它可以在目标类被加载到程序之前增强类的字节代码。AspectJ5的“加载时织入(LTW)”就以这种方式支持织入切面。
  • 运行时:切面在程序运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会动态创建一个代理对象来委托给目标对象。这就是Spring AOP织入切面的方式。


通知类型


Spring AOP的5个时间点
通知类型接口
Beforeorg.springframework.aop.MethodBeforeAdvice
After-returningorg.springframework.aop.AfterReturningAdvice
After-throwingorg.springframework.aop.ThrowsAdvice
Aroundorg.aopalliance.intercept.MethodInterceptor
Introductionorg.springframework.aop.IntroductionInterceptor


AOP配置元素


Spring2.0的AOP配置元素
AOP配置元素功能
<aop:advisor>定义一个AOP通知者
<aop:after>定义一个AOP后通知(不考虑被通知的方法是否成功返回)
<aop:after-returning>定义一个AOP返回后通知
<aop:after-throwing>定义一个AOP抛出后通知
<aop:around>定义一个AOP周围通知
<aop:aspect>定义一个切面
<aop:before>定义一个AOP前通知
<aop:config>顶级AOP元素。大多数<aop:*>元素必须包含在<aop:config>里
<aop:Pointcut>定义一个切点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值