首页 > 编程语言 > 详细

[技术分享]20171214_spring_@Before @After @AfterReturning @Around @AfterThrowing spring aop 的advise(通知)

时间:2017-12-14 23:31:08      阅读:451      评论:0      收藏:0      [点我收藏+]

今天在项目中成功实现了spring aop 。

@Before @After @AfterReturning @Around @AfterThrowing 

这五个是实现spring aop常用的五个注解

相关的注解还有@Aspect @Component @PointCut 

 

我在实践中发现:

1.@Before @After @AfterReturning @Around 这四个通知只有用一种,如果使用两种及以上会发生一些问题。

2.@@PointCut 注解的方法不会被执行,只起到了一个把切面表达式抽象出来的作用。

3.@AfterReturning是最常用的:

使用 JointPoint.getArgs()可以获取执行目标方法时传入的参数。(同@Before @After @Around @AfterThrowing)

@AfterReturning注解中的returning = "object"应该和形参的object名字一致 ,用来接收目标方法的返回值。

@AfterReturning(pointcut="execution(...) " returning="object")
public void afterReturning(JointPoint jp,Object object){ 
//注意这里的object 应该和returning="object"保持一致 System.out.println(object); //object是目标方法返回的参数 System.out.println(jp.getArgs() ); //通过这种方法可以获取目标方法的传入参数 }

 

下面是更具体的内容:

@Aspect
@Componet
public class myPointCut{

  @Before("execution(...) ")
  public void before(){ 
        System.out.println("前置通知:在目标方法执行前执行" ); 
  }
    
  @After("execution(...) ")
  public void after(){ 
        System.out.println("后置通知:在目标方法执行后执行" ); 
  }

  @Around("execution(...) ")
  public void around(){ 
        System.out.println("环绕通知:在目标方法执行前后都执行" ); 
  }

  @AfterReturning(pointcut="execution(...) " returning="object")
  public void afterReturning(JointPoint jp,Object object){ 
     //注意这里的object 应该和returning="object"保持一致   System.out.println(object); //object是目标方法返回的参数   System.out.println(jp.getArgs() ); //通过这种方法可以获取目标方法的传入参数   }   @AfterThrowing("execution(...) ")   public void afterThrowing(){   System.out.println("异常通知:在目标方法发生异常时执行" );   } }

 

[技术分享]20171214_spring_@Before @After @AfterReturning @Around @AfterThrowing spring aop 的advise(通知)

原文:http://www.cnblogs.com/dingzheng/p/8040361.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!