Spring AOP

AOP的各组成部件
■横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
■切面( aspect) : 类是对物体特征的抽象,切面就是对横切关注点的抽象
■连接点 ( joinpoint) :被拦截到的方法 ,字段或构造方法
■切入点( pointcut ) :对连接点进行拦截的定义
■通知( advice ) : 拦截到连接点之后要执行的代码
■目标对象( target ) : 代理的目标对象

AOP定义切入点

<aop:pointcut expression="execution(public void com.springdemo.service.impl.ProductServiceImpl.work(..) )"  id="p1"/>

AOP定义切面方法

<aop:aspect ref="myAdvice"></aop:aspect>

AOP增强种类

advance,通知,在Spring中叫增强也许更加合理。所谓增强,其实就是向各个程序内部注入一些代码从而增强原有程序的功能。Spring使用增强类定义横切逻辑,同时由于Spring只支持方法连接点,增强还包括在方法的哪一点加入横切代码的方位信息,所以增强即包括横切逻辑,又包含部分连接点的信息。

  • 前置增强 aop:before doBefore(JoinPoint jp)前四种绑定函数如此形式

  • 后置增强 aop:after

  • 异常增强 aop:after-returning

  • 返回增强 aop:after-throwing

  • 环绕增强 aop:around doAround(ProceedingJoinPoint jp)环绕增强如此形式

    增强名称接口描述
    前置增强org.springframework.aop.BeforeAdvice在目标方法执行前来实施增强。
    后置增强org.springframework.aop.AfterReturningAdvice在目标方法执行后来实施增强。
    环绕增强org.aopalliance.intercept.MethodInterceptor在目标方法执行前、后实施增强。环绕增强是AOP联盟定义的接口,其他四种增强接口则是Spring定义的接口。
    异常抛出增强org.springframework.aop.ThrowsAdvice在目标方法抛出异常后来实施增强
    返回增强org.springframework.aop.Introductioninterceptor表示在目标类中添加一些新的方法和属性。引介增强是一种特殊的增强。他可以在目标类中添加属性和方法,通过拦截定义一个接口,让目标代理实现这个接口。他的连接点是类级别的,而前面的几种则是方法级别的。

AOP增强种类运行顺序

执行顺序为 前置增强----->目标函数------->后置增强-------->返回增强跟异常增强二选一

返回增强出现说明程序无异常无错误 即异常增强不执行或不存在 当出现异常增强 异常被catch 程序中断将会无返回 即返回增强不存在或不执行

AOP增强方法绑定方式

<aop:before method="doBefore" pointcut-ref="p1"></aop:before>
<aop:after method="doAfter" pointcut-ref="p1"></aop:after>
<aop:after-returning method="doReturn" pointcut-ref="p2"></aop:after-returning>
<aop:after-throwing method="doException" pointcut-ref="p1"></aop:after-throwing>
<aop:around method="doAround" pointcut-ref="p1"></aop:around>

AOP中开启@注解的使用与扫描开关包

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

AOP注解形式的使用

返回增强需要注明returning 异常增强需要注明throwing

@AfterReturning(value="execution(public int com.springdemo.service.impl.OtherServiceImpl.*(..))",returning = "re")
@AfterThrowing(value="execution(public int mul(int,int))",throwing="e")

其余为

@Around("execution(public int *(..))")
@After("execution(public int mul(..))")
@Before("execution(public int mul(int,int))")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值