<prepare expr="all(POJO)"/>This expression simple states to prepare all constructor, method, and field access to be AOPable. Actually, any <pointcut> or <bind> expression will cause a Java class to be "prepared".
You can see this in action within Driver.java
System.out.println("--- adding instance interceptors ---"); Advised advised = (Advised)pojo; advised._getInstanceAdvisor().insertInterceptor(new InstanceInterceptor());
Driver.java typecasts the pojo instance to Advised. From the Advised interface, the code gets access to the InstanceAdvisor API and inserts an interceptor.
AdviceBinding binding = new AdviceBinding("execution(POJO->new(..))", null); binding.addInterceptor(SimpleInterceptor.class); AspectManager.instance().addBinding(binding);
You can also remove bindings at runtime as well through the AspectManager class. See javadocs for more detail.
To compile and run (for further detail, refer to our Compiling and Running Examples Guide):
$ ant run.aopc
It will javac the files and then run the AOPC precompiler to manipulate the bytecode, then finally run the example. The output should be similar to this:
_run.aopc: [java] --- new POJO(); --- [java] in empty constructor [java] --- adding instance interceptors --- [java] --- pojo.counter++; --- [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.FieldReadInvocation [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.FieldWriteInvocation [java] --- pojo.someMethod(); --- [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.MethodInvocation [java] in someMethod [java] --- new POJO(); --- [java] <<< Entering Simplenterceptor for: org.jboss.aop.joinpoint.ConstructorInvocation [java] in empty constructor [java] --- adding instance interceptors --- [java] --- pojo.counter++; --- [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.FieldReadInvocation [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.FieldWriteInvocation [java] --- pojo.someMethod(); --- [java] <<< Entering Instancenterceptor for: org.jboss.aop.joinpoint.MethodInvocation [java] in someMethod