KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > aspect > CFlowTestAspect


1 /**************************************************************************************
2  * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
3  * http://aspectwerkz.codehaus.org *
4  * ---------------------------------------------------------------------------------- *
5  * The software in this package is published under the terms of the LGPL license *
6  * a copy of which has been included with this distribution in the license.txt file. *
7  **************************************************************************************/

8 package test.aspect;
9
10 import test.Loggable;
11 import org.codehaus.aspectwerkz.definition.Pointcut;
12 import org.codehaus.aspectwerkz.definition.Pointcut;
13 import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
14
15 /**
16  * @author <a HREF="mailto:jboner@codehaus.org">Jonas BonŽr </a>
17  * @Aspect perJVM
18  */

19 public class CFlowTestAspect {
20     // ============ Pointcuts ============
21

22     /**
23      * @Expression cflow(call(* test.CFlowTest.step1()) AND within(test.CFlowTest))
24      */

25     Pointcut pc1;
26
27     /**
28      * @Expression cflow(call(* test.CFlowTest.step1_A()) AND within(test.CFlowTest))
29      */

30     Pointcut pc1_A;
31
32     /**
33      * @Expression cflow(call(* test.CFlowTest.step1_B()) AND within(test.CFlowTest))
34      */

35     Pointcut pc1_B;
36
37     /**
38      * @Expression execution(* test.CFlowTest.step2())
39      */

40     Pointcut pc2;
41
42     /**
43      * @Expression execution(* test.CFlowTest.step2_B())
44      */

45     Pointcut pc2_B;
46
47     // ============ Advices ============
48

49     /**
50      * @Around pc2 AND pc1
51      */

52     public Object JavaDoc execute(final JoinPoint joinPoint) throws Throwable JavaDoc {
53         ((Loggable) joinPoint.getTarget()).log("advice-before ");
54         final Object JavaDoc result = joinPoint.proceed();
55         ((Loggable) joinPoint.getTarget()).log("advice-after ");
56         return result;
57     }
58
59     /**
60      * @Around pc2_B AND pc1_B AND pc1_A
61      */

62     public Object JavaDoc execute2(final JoinPoint joinPoint) throws Throwable JavaDoc {
63         ((Loggable) joinPoint.getTarget()).log("advice-before2 ");
64         final Object JavaDoc result = joinPoint.proceed();
65         ((Loggable) joinPoint.getTarget()).log("advice-after2 ");
66         return result;
67     }
68
69     /**
70      * @Around execution(* test.CFlowTest.step2Anonymous()) AND cflow(call(*
71      * test.CFlowTest.step1Anonymous()) AND within(test.CFlowTest))
72      */

73     public Object JavaDoc executeAnonymous(final JoinPoint joinPoint) throws Throwable JavaDoc {
74         ((Loggable) joinPoint.getTarget()).log("advice-beforeAnonymous ");
75         final Object JavaDoc result = joinPoint.proceed();
76         ((Loggable) joinPoint.getTarget()).log("advice-afterAnonymous ");
77         return result;
78     }
79
80     /**
81      * FIXME: this expression leads to match all at cflow early filtering.
82      * <p/>
83      * X@Around execution(* test.CFlowTest.step2_C()) AND !cflow(call(* test.CFlowTest.step1_C()) AND
84      * within(test.CFlowTest))
85      */

86     public Object JavaDoc executeC(final JoinPoint joinPoint) throws Throwable JavaDoc {
87         ((Loggable) joinPoint.getTarget()).log("advice-beforeC ");
88         final Object JavaDoc result = joinPoint.proceed();
89         ((Loggable) joinPoint.getTarget()).log("advice-afterC ");
90         return result;
91     }
92
93     /**
94      * @After execution(* test.CFlowTest.cflowOnMyself()) && cflow(execution(* test.CFlowTest.cflowOnMyself()))
95      */

96     public void afterMySelf(JoinPoint joinPoint) {
97         ((Loggable) joinPoint.getTarget()).log("advice-cflowOnMyself ");
98     }
99 }
Popular Tags