| |
package com.youngkun.aoptest.pointcut; public class BeanOne { public void foo(){ System.out.println("foo"); } public void bar(){ System.out.println("bar"); } } package com.youngkun.aoptest.pointcut; public class BeanTwo { public void foo(){ System.out.println("foo"); } public void bar(){ System.out.println("bar"); } } package com.youngkun.aoptest.pointcut; import java.lang.reflect.Method; import org.springframework.aop.ClassFilter; import org.springframework.aop.support.StaticMethodMatcherPointcut; public class SimpleStaticPointcut extends StaticMethodMatcherPointcut { //foo()메소드와 일치 public boolean matches(Method method, Class cls) { return ("foo".equals(method.getName())); } //BeanOne 클래스와 일치 public ClassFilter getClassFilter(){ return new ClassFilter(){ public boolean matches(Class cls){ return(cls == BeanOne.class); } }; } } package com.youngkun.aoptest.pointcut; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class SimpleAdvice implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println(">> Invoking " + invocation.getMethod().getName()); Object retVal = invocation.proceed(); System.out.println(">> Done"); return retVal; ; } } package com.youngkun.aoptest.pointcut; import org.aopalliance.aop.Advice; import org.springframework.aop.Advisor; import org.springframework.aop.Pointcut; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; public class StaticPointcutExample { public static void main(String[] args) { BeanOne one = new BeanOne(); BeanTwo two = new BeanTwo(); BeanOne proxyOne; BeanTwo proxyTwo; //pointcut, advice, advisor 생성 Pointcut pc = new SimpleStaticPointcut(); Advice advice = new SimpleAdvice(); Advisor advisor = new DefaultPointcutAdvisor(pc, advice); //BeanOne proxy 생성 ProxyFactory pf = new ProxyFactory(); pf.addAdvisor(advisor); pf.setTarget(one); proxyOne = (BeanOne)pf.getProxy(); //BeanTwo proxy 생성 pf = new ProxyFactory(); pf.addAdvisor(advisor); pf.setTarget(two); proxyTwo = (BeanTwo)pf.getProxy(); proxyOne.foo(); proxyTwo.foo(); proxyOne.bar(); proxyTwo.bar(); } } 실행결과 붉은색 클래스와 메소드가 일치해서 advice 적용 파란색 클래스와 메소드가 일치하지 않아서 advice가 적용이 안됨 >> Invoking foo foo >> Done foo bar bar |
SSISO Community