| /*
 Pro Spring
 By Rob Harrop
 Jan Machacek
 ISBN: 1-59059-461-4
 Publisher: Apress
 */
 
 ///////////////////////////////////////////////////////////////////////////////////////
 public class TestBean {
 
 public void foo() {
 System.out.println("foo()");
 }
 }
 
 
 ///////////////////////////////////////////////////////////////////////////////////////
 import java.lang.reflect.Method;
 
 import org.springframework.aop.MethodBeforeAdvice;
 
 public class SimpleBeforeAdvice implements MethodBeforeAdvice {
 
 
 public void before(Method method, Object[] args, Object target)
 throws Throwable {
 System.out.println("Before method: " + method);
 }
 
 }
 
 
 ///////////////////////////////////////////////////////////////////////////////////////
 import org.springframework.aop.Advisor;
 import org.springframework.aop.Pointcut;
 import org.springframework.aop.framework.ProxyFactory;
 import org.springframework.aop.support.ControlFlowPointcut;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 
 public class ControlFlowExample {
 
 public static void main(String[] args) {
 ControlFlowExample ex = new ControlFlowExample();
 ex.run();
 }
 
 public void run() {
 TestBean target = new TestBean();
 
 // create advisor
 Pointcut pc = new ControlFlowPointcut(ControlFlowExample.class, "test");
 Advisor advisor = new DefaultPointcutAdvisor(pc,
 new SimpleBeforeAdvice());
 
 // create proxy
 ProxyFactory pf = new ProxyFactory();
 pf.setTarget(target);
 pf.addAdvisor(advisor);
 
 TestBean proxy = (TestBean) pf.getProxy();
 
 System.out.println("Trying normal invoke");
 proxy.foo();
 System.out.println("Trying under ControlFlowExample.test()");
 test(proxy);
 }
 
 private void test(TestBean bean) {
 bean.foo();
 
 }
 }
 
 
 
 |