Composable Pointcut Example
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress */ ////////////////////////////////////////////////////////////////////////////////// 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); } } ////////////////////////////////////////////////////////////////////////////////// public class SampleBean { public String getName() { return "Rob Harrop"; } public void setName(String name) { } public int getAge() { return 100; } } ////////////////////////////////////////////////////////////////////////////////// import java.lang.reflect.Method; import org.springframework.aop.Advisor; import org.springframework.aop.ClassFilter; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.ComposablePointcut; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.StaticMethodMatcher; public class ComposablePointcutExample { public static void main(String[] args) { // create target SampleBean target = new SampleBean(); ComposablePointcut pc = new ComposablePointcut(ClassFilter.TRUE, new GetterMethodMatcher()); System.out.println("Test 1"); SampleBean proxy = getProxy(pc, target); testInvoke(proxy); System.out.println("Test 2"); pc.union(new SetterMethodMatcher()); proxy = getProxy(pc, target); testInvoke(proxy); System.out.println("Test 3"); pc.intersection(new GetAgeMethodMatcher()); proxy = getProxy(pc, target); testInvoke(proxy); } private static SampleBean getProxy(ComposablePointcut pc, SampleBean target) { // create the advisor Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleBeforeAdvice()); // create the proxy ProxyFactory pf = new ProxyFactory(); pf.setTarget(target); pf.addAdvisor(advisor); return (SampleBean) pf.getProxy(); } private static void testInvoke(SampleBean proxy) { proxy.getAge(); proxy.getName(); proxy.setName("Rob Harrop"); } private static class GetterMethodMatcher extends StaticMethodMatcher { public boolean matches(Method method, Class cls) { return (method.getName().startsWith("get")); } } private static class GetAgeMethodMatcher extends StaticMethodMatcher { public boolean matches(Method method, Class cls) { return "getAge".equals(method.getName()); } } private static class SetterMethodMatcher extends StaticMethodMatcher { public boolean matches(Method method, Class cls) { return (method.getName().startsWith("set")); } } }