/* 
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(); 
 
    } 
} 
 
            
       
  |