码迷,mamicode.com
首页 > 其他好文 > 详细

基于注解的 AOP 配置

时间:2020-07-13 21:56:34      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:text   spring   ntc   @param   gconf   The   class   toc   ace   

第一步:在 spring 配置文件中开启 spring 对注解 AOP 的支持

  <!-- 开启 spring 对注解 AOP 的支持 --> 
  <aop:aspectj-autoproxy> <aop:aspectj-autoproxy />  

第二步:在配置文件中指定 spring 要扫描的包

  <!-- 告知 spring,在创建容器时要扫描的包 --> 
  <context:component-scan base-package="com.itheima"></context:component-scan>

第三步:把通知类也使用注解配置

/** 
 * 事务控制类  
 * @author  
 * @Company 
 */ 
  @Component("txManager") 
  public class TransactionManager { 
   //定义一个 DBAssit  
  @Autowired  
  private DBAssit dbAssit ;  
 } 

第四步:在通知类上使用@Aspect 注解声明为切面

第五步:在增强的方法上使用注解配置通知

第六步:在增强的方法上使用注解配置通知

  @Before 
   作用:   把当前方法看成是前置通知。  
   属性:   value:用于指定切入点表达式,还可以指定切入点表达式的引用。

   //开启事务  
   @Before("execution(* com.itheima.service.impl.*.*(..))")  
   public void beginTransaction() {   
        try {    
              dbAssit.getCurrentConnection().setAutoCommit(false);   
        } catch (SQLException e) {    
              e.printStackTrace();   
        }  
  }
  
  说明:@AfterReturning 、@AfterThrowing 、@After 运用方式同理


  @Around 
        作用:  把当前方法看成是环绕通知。 
        属性:  
              value:用于指定切入点表达式,还可以指定切入点表达式的引用。 

   /** 
    * 环绕通知   
    * @param pjp   
    * @return   
    */ 
   @Around("execution(* com.itheima.service.impl.*.*(..))")  
   public Object transactionAround(ProceedingJoinPoint pjp) { 
        //定义返回值   Object rtValue = null;   
        try { 
           //获取方法执行所需的参数    
           Object[] args = pjp.getArgs(); 
           
           //前置通知:开启事务    
           beginTransaction(); 
           
           //执行方法    
           rtValue = pjp.proceed(args); 
          //后置通知:提交事务    
              commit();   
          }catch(Throwable e) { 
           //异常通知:回滚事务    
            rollback();    
            e.printStackTrace();   
         }finally {    
         //最终通知:释放资源    
              release();   
         }   
         return rtValue;  
        } 

第七步:切入点表达式注解

  @Pointcut 
        作用:  指定切入点表达式 属性: 
        value:指定表达式的内容

   @Pointcut("execution(* com.itheima.service.impl.*.*(..))")
   private void pt1() {} 

  引用方式:  
  
  /** 
   * 环绕通知   
   * @param pjp   
   * @return   
   */ 
   @Around("pt1()")//注意:千万别忘了写括号  
  public Object transactionAround(ProceedingJoinPoint pjp) {   
        //定义返回值   
        Object rtValue = null;   
        try { 
           //获取方法执行所需的参数    
              Object[] args = pjp.getArgs(); 
           //前置通知:开启事务    
              beginTransaction(); 
           //执行方法    
              rtValue = pjp.proceed(args); 
           //后置通知:提交事务    
              commit();   
        }catch(Throwable e) { 
           //异常通知:回滚事务    
              rollback();    
              e.printStackTrace();   
        }finally {    
           //最终通知:释放资源    
           release();   
        }   
           return rtValue;  
         }

第八步:不使用 XML的配置方

        @Configuration 
        @ComponentScan(basePackages="com.itheima") 
        @EnableAspectJAutoProxy 
        public class SpringConfiguration { }

基于注解的 AOP 配置

标签:text   spring   ntc   @param   gconf   The   class   toc   ace   

原文地址:https://www.cnblogs.com/jock766/p/13295710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!