zoukankan      html  css  js  c++  java
  • ASpectJ对AOP的实现

    切入点表达式


    基于注解


     1 @Aspect // 表示当前类切面
     2 public class MyAspect {
     3 
     4     @Before("execution(* *..ISomeService.doFirst(..))")
     5     public void before(JoinPoint jp) {
     6         System.out.println("执行 before2" + jp);
     7     }
     8 
     9     @AfterReturning(value = "execution(* *..ISomeService.doSecond(..))", returning = "result")
    10     public void myAfterReturning(Object result) {
    11         System.out.println("执行 my after, result" + result);
    12     }
    13 
    14     // 定义了一个切入点
    15     @Pointcut("execution(* *..ISomeService.doThird(..))")
    16     public void doThirdPointCut(){}
    17 
    18     @Around("doThirdPointCut()")
    19     public Object myAround(ProceedingJoinPoint pp) throws Throwable {
    20         System.out.println("执行around1");
    21         Object res = pp.proceed();
    22         System.out.println("执行around2 " + res);
    23         return res;
    24     }
    25 
    26 }
    1         <bean id="myAspect" class="day1208.MyAspectXML"/>
    2         <bean id="someService" class="day1208.ServiceImpl"/>
    3         <aop:aspectj-autoproxy/>

    如果运行的时候出现error at ::0 can't find referenced pointcut, 一般是因为jdk版本和AspectJ.Weaver不一致.

    1.6以下的aspectj需要用jdk1.6运行. 

    基于XML


     1 public class MyAspectXML {
     2 
     3     public void before(JoinPoint jp) {
     4         System.out.println("执行 before2" + jp);
     5     }
     6 
     7     public void myAfterReturning(Object result) {
     8         System.out.println("执行 my after, result" + result);
     9     }
    10     public void myAfterReturning() {
    11         System.out.println("执行 my after, no result");
    12     }
    13 
    14     public void doThirdPointCut(){}
    15 
    16     public Object myAround(ProceedingJoinPoint pp) throws Throwable {
    17         System.out.println("执行around1");
    18         Object res = pp.proceed();
    19         System.out.println("执行around2 " + res);
    20         return res;
    21     }
    22 
    23 }
    1         <aop:config>
    2                 <aop:pointcut id="secondPT" expression="execution(* *..ISomeService.doSecond(..))"/>
    3                 <aop:aspect ref="myAspect">
    4                         <aop:before method="before" pointcut="execution(* *..ISomeService.doFirst(..))"/>
    5                         <aop:after-returning method="myAfterReturning(java.lang.Object)" pointcut-ref="secondPT" returning="result"/>
    6                 </aop:aspect>
    7         </aop:config>
  • 相关阅读:
    第五天站立会议记录
    第四天站立会议
    第三天站立会议
    第二天站立会议
    冲刺会议第三天
    冲刺会议第二天
    团队建议总结
    第二次冲刺第一天
    项目总结(09)
    第七天站立会议
  • 原文地址:https://www.cnblogs.com/xdecode/p/8001698.html
Copyright © 2011-2022 走看看