spring로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

spring로 검색한 결과
등록일:2008-06-10 17:15:35
작성자:
제목:[AOP]StaticMethodMatcherPointcut을 사용한 Static Pointcut 예제


StaticMethodMatcherPointcut을 사용한 Static Pointcut 예제
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