/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package examples.proxy;
import org.codehaus.aspectwerkz.annotation.Before;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
import org.codehaus.aspectwerkz.proxy.Proxy;
import org.codehaus.aspectwerkz.intercept.Advisable;
import org.codehaus.aspectwerkz.intercept.BeforeAdvice;
/**
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
public class Proxy5 {
static @interface AspectMarker {}
public String getName() {
return "AWProxy";
}
//@AspectMarker
public void publicMethod() {
System.out.println("publicMethod");
protectedMethod();
}
@AspectMarker
protected void protectedMethod() {
System.out.println("protectedMethod");
privateMethod();
}
@AspectMarker
private void privateMethod() {
System.out.println("privateMethod");
publicFinalMethod();
}
@AspectMarker
public final void publicFinalMethod() {
System.out.println("publicFinalMethod");
}
public static void main(String args[]) throws Throwable {
System.out.println("**** Use without proxy - only regular weaving may occur on non-proxy");
Proxy5 me = new Proxy5();
me.publicMethod();
System.out.println("\n**** Use with proxy - both regular weaving and proxy weaving occur");
// make it advisable
Proxy5 meP = (Proxy5) Proxy.newInstance(Proxy5.class, true, true);
System.out.println("I am : " + meP.getName());
meP.publicMethod();
System.out.println("\n**** Use with proxy - adding interceptor to publicMethod()");
// do some per instance changes
((Advisable)meP).aw_addAdvice(
"execution(* *.publicMethod(..))",
new BeforeAdvice() {
public void invoke(JoinPoint jp) throws Throwable {
System.out.println("Intercept : " + jp.getSignature());
}
}
);
meP.publicMethod();
}
/**
* An aspect that is always there
*/
public static class Aspect {
@Before("execution(@examples.proxy.Proxy5$AspectMarker !static * examples.proxy.Proxy5.*(..))")
void before(StaticJoinPoint jp) {
System.out.println(jp.getType() + " : " + jp.getSignature());
}
}
}