Version 2

    Typedefs

     

    If you have several classes that all are going to be intercepted in a similar way, you can declare a

    typedef to avoid declaring different pointcuts for each class. The typedef must resolve to a class

    expression.

     

     

      <typedef name="TD" expr="(class(POJO) AND has(* *->method(..))) OR class($instanceof{ExecutionTypedefInterface}) OR class(@executionTypedef)" /> 
    

     

     

     

    The typedef can then be used in place of the class name in pointcuts

      <bind pointcut="execution($typedef{TD}->new())">
        <interceptor class="SimpleInterceptor" ></interceptor> 
      </bind>
      <bind pointcut="execution(* $typedef{TD}->method())">
        <interceptor class="SimpleInterceptor" ></interceptor> 
      </bind>
      <bind pointcut="field(* $typedef{TD}->field1)">
        <interceptor class="SimpleInterceptor" ></interceptor> 
      </bind>
      <bind pointcut="all($typedef{TD})">
        <interceptor class="SimpleInterceptor2" ></interceptor> 
      </bind>
    

     

    In the supplied example POJO is not annotated and does not implement ExecutionTypedefInterface. POJO2 implements ExecutionTypedefInterface, and POJO3 is annotated with @executionTypedef.

     

    Run the example

    To compile and run:

      $ ant
    

    It will javac the files and then run the AOPC precompiler to manipulate the bytecode, then finally run the example.  The output should read as follows:

    run:
         [java] --- new POJO(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo.field1 = 10; ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- get pojo.field1;---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo.method(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
    
         [java] =======================
    
         [java] --- new POJO2(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo2.field1 = 10; ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- get pojo2.field1; ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo2.method(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
    
         [java] =======================
    
         [java] --- new POJO3(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo3.field1 = 10; ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- get pojo3.field1; ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
         [java] --- pojo3.method(); ---
         [java] <<< Entering SimpleInterceptor
         [java] <<< Entering SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor2
         [java] >>> Leaving SimpleInterceptor
    
    

     

    POJO, POJO2 and POJO3 all get intercepted the same.