Spring中AspectJ对AOP的实现

A Step1 :定义业务接口与实现类

 BStep2:定义切面类

 CStep3:声明目标对象切面类对象

DStep4:注册 AspectJ 的自动代理  

在定义好切面 Aspect 后,需要通知 Spring 容器,让容器生成“目标类 + 切面”的代理对象。这个代理是由容器自动生成的。只需要在 Spring 配置文件中注册一个基于 aspectj 自动代理生成器,其就会自动扫描到 @Aspect 注解,并按通知类型与切入点,将其织入,并 生成代理。

EStep5:测试类中使用目标对象的 id 

AspectJ 的五种通知类型

@Before 前置通知 - 方法有 JoinPoint 参数
      在目标方法执行之前执行。被注解为前置通知的方法,可以包含一个 JoinPoint 类型参数。该类型的对象本身就是切入点表达式。通过该参数,可获取切入点表达式、方法签名、 目标对象等。 不光前置通知的方法,可以包含一个 JoinPoint 类型参数,所有的通知方法均可包含该 参数。

@AfterReturning 后置通知-注解有 returning 属性 

     在目标方法执行之后执行。由于是目标方法之后执行,所以可以获取到目标方法的返回 值。该注解的 returning 属性就是用于指定接收方法返回值的变量名的。所以,被注解为后 置通知的方法,除了可以包含 JoinPoint 参数外,还可以包含用于接收返回值的变量。该变 量最好为 Object 类型,因为目标方法的返回值可能是任何类型。

@Around 环绕通知 - 增强方法有 ProceedingJoinPoint参数
      在目标方法执行之前之后执行。被注解为环绕增强的方法要有返回值, Object 类型。并 且方法可以包含一个 ProceedingJoinPoint 类型的参数。接口 ProceedingJoinPoint 其有一个 proceed() 方法,用于执行目标方法。若目标方法有返回值,则该方法的返回值就是目标方法 的返回值。最后,环绕增强方法将其返回值返回。该增强方法实际是拦截了目标方法的执行。
接口增加方法

 @AfterThrowing 异常通知-注解中有 throwing 属性

      在目标方法抛出异常后执行。该注解的 throwing 属性用于指定所发生的异常类对象。 当然,被注解为异常通知的方法可以包含一个参数 Throwable,参数名称为 throwing 指定的 名称,表示发生的异常对象。

增加业务方法:

 

 @After 最终通知

 @Pointcut 定义切入点

      当较多的通知增强方法使用相同的 execution 切入点表达式时,编写、维护均较为麻烦。 AspectJ 提供了 @Pointcut 注解,用于定义 execution 切入点表达式。
       其用法是,将 @Pointcut 注解在一个方法之上,以后所有的 execution value 属性值均 可使用该方法名作为切入点。代表的就是 @Pointcut 定义的切入点。这个使用 @Pointcut 注解 的方法一般使用 private 的标识方法,即没有实际作用的方法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值