使用AspectJ框架实现AOP

使用AspectJ框架实现AOP

除jar包外资源文件配置

<!-- 使用组件扫描器扫描 -->

<context:component-scan base-package="cn.lexed.service"/>

<!-- 声明切面类对象 -->

<bean class="cn.lexed.aop.MyAspectJ"/>

<!-- 配置 AspectJ的代理机制 -->

<aop:aspectj-autoproxy/>

@Pointcut定义切入

/*  @Pointcut:定义和管理切入点,如果你项目里有多个切入点表达式重复的,可以这样使用
     *        value:切入点表达式
     *        
     *  特点:定义在方法上,此方法的方法名就是切入点表达式的别名
     * */

/*定义方法,:
     *     1.public
     *     2.方法没有返回值
     *     3.方法名自定义
     *     4.方法可以有参数,也可以没有参数
     *       如果有参数,参数不是自定义的(参数不能瞎写),有几个参数类型
     *   
     * 
     * */

JoinPoint

/* 
      * 指定通知方法中的参数:JoinPoint
      * 作用:可以在通知方法中获取方法执行时的信息,例如方法名称方法的实参等
      *     如果说你需要用到方法里的信息,就加入JoinPoint
      *     这个JoinPoint参数的值由框架赋予的,必须是第一个位置的参数
      **/ 

@Pointcut(value="execution(* cn.lexed.service..*(..))")
    public void mypt(){
        //无需代码
    }

/*@Before:前置通知注解
      *    属性:value
      *    位置:在方法上面
      *    
      *    特点:
      *       1.在核心方法之前先执行
      *       2.不会改变核心方法执行的结果
      *       3.不会影响核心方法的执行
      * 
      * */
     /*@Before(value="execution(* cn.lexed.service..*(..))")
     public void myBefore(){
         System.out.println("在业务方法之前进行日志输出显示");
     }*/

/*
      * @AfterReturning:后置通知
      *        value: 属性值就是切入点表达式
      *        returning:自定义的变量,表示目标方法的返回值
      *                  自定义的变量和通知方法的形参名一致
      *  特点:1.在目标方法之后执行
      *      2.能够获取到目标方法的返回值,根据这个返回值做不同的处理
      * */
     @AfterReturning(value="mypt()",returning="res")
     public void myAfterRe(JoinPoint jp,Object res){
         System.out.println(res);
         if(res.equals("abcd")){
             //写一些功能
         }else{
             //写一些功能
         }
         System.out.println("在业务方法之后进行事务相关的处理");
     }
    

/* 1.环绕通知方法的定义格式:
     *    1.public
     *    2.必须有一个返回值  ,推荐使用Object
     *    3.方法名自定义
     *    4.方法有参数,固定的参数  ProceedingJoinPoint
     * 
     * 
     * 
     * */
    /*@Around(value="execution(* cn.lexed.service..*(..))")
    public Object myAround(ProceedingJoinPoint pjp) throws Throwable{
        
        Object o=null;
        
        System.out.println("在业务方法之前进行日志输出显示");
        
        pjp.proceed();//doFrist
        
        System.out.println("在业务方法之后进行事务相关的处理");
        return o;
    }*/

/* 异常通知方法的定义格式:
     *     1.public
     *     2.没有返回值
     *     3.方法名自定义
     *     4.方法中有一个Exception
     *  
     * @AfterThrowing:异常通知
     *    属性: value:
     *         throwing:表示目标方法抛出的异常对象  ,名称和方法参数名一致
     * */
    /*@AfterThrowing(value="execution(* cn.lexed.service..*(..))",throwing="ex")
    public void myThrow(Exception ex){
        System.out.println("异常通知:方法发送异常时,执行:"+ex.getMessage());
        //发送邮件,短信,通知开发人员
    }*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值