ProxyFactoryBean을 이용한 초간단 AOP 구현
모하니?/Coding : 2009. 12. 16. 16:01
스프링 AOP가 어렵다고 생각하시는 분들은 저 클래스를 사용하는 방법부터 익히시면 도움이 될 것 같습니다.
아주 간략하게 ProxyFactoryBean을 사용해서 AOP를 적용해 보겠습니다.
AOP는 OOP 같은 프로그래밍 기법이지 무슨 기술이 아닙니다. 따라서 이 글에서 구현하는 내용은 AOP 적용 방법 중 하나라고 생각하시면 됩니다.
interface Service {
public void hi();
public void hi2();
}
이런 인터페이스가 있고
class ServiceImpl implements Service {
public void hi(){
System.out.println("my business");
}
@Override
public void hi2() {
System.out.println("my2");
}
}
이런 구현체가 있을 때. hi() 호출 전 후에만 메시지를 출력하고 hi2()는 걍 저대로 출력하고 싶다면 ... 우선 해당 작업을 수행할 MethodIterceptor 인터페이스의 구현체를 만듭니다.
class ServiceLoggingAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("before hi");
invocation.proceed();
System.out.println("after hi");
return null;
}
}
그리고 hi()와 hi2()를 선별해줄 NameMatchMethodPointcut을 만듭니다.
class ServiceLoggingPointcur extends NameMatchMethodPointcut {
ServiceLoggingPointcur() {
setMappedName("hi");
}
}
이제 마지막으로 ProxyFactoryBean으로 위에서 만들었던 타겟(Service 구현체), 어드바이스(MethodInterceptor 구현체), 포인트컷(NameMatchMethodPointcut 구현체)을 ProxyFactoryBean에 설정 해주면 끝!
Service service;
ProxyFactoryBean proxyFactoryBean;
@Before
public void setUp(){
proxyFactoryBean = new ProxyFactoryBean();
proxyFactoryBean.setTarget(new ServiceImpl());
proxyFactoryBean.addAdvisor(new DefaultPointcutAdvisor(
new ServiceLoggingPointcur(),
new ServiceLoggingAdvice()));
}
@Test
public void logging(){
Service service = (Service) proxyFactoryBean.getObject();
service.hi();
service.hi2();
}
이렇게 하면 콘솔에

요런식으로 출력됩니다.
자세한 내용은 언젠간 출간될 Toby님의 스프링 책을 참조하세요.
아주 간략하게 ProxyFactoryBean을 사용해서 AOP를 적용해 보겠습니다.
AOP는 OOP 같은 프로그래밍 기법이지 무슨 기술이 아닙니다. 따라서 이 글에서 구현하는 내용은 AOP 적용 방법 중 하나라고 생각하시면 됩니다.
interface Service {
public void hi();
public void hi2();
}
이런 인터페이스가 있고
class ServiceImpl implements Service {
public void hi(){
System.out.println("my business");
}
@Override
public void hi2() {
System.out.println("my2");
}
}
이런 구현체가 있을 때. hi() 호출 전 후에만 메시지를 출력하고 hi2()는 걍 저대로 출력하고 싶다면 ... 우선 해당 작업을 수행할 MethodIterceptor 인터페이스의 구현체를 만듭니다.
class ServiceLoggingAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("before hi");
invocation.proceed();
System.out.println("after hi");
return null;
}
}
그리고 hi()와 hi2()를 선별해줄 NameMatchMethodPointcut을 만듭니다.
class ServiceLoggingPointcur extends NameMatchMethodPointcut {
ServiceLoggingPointcur() {
setMappedName("hi");
}
}
이제 마지막으로 ProxyFactoryBean으로 위에서 만들었던 타겟(Service 구현체), 어드바이스(MethodInterceptor 구현체), 포인트컷(NameMatchMethodPointcut 구현체)을 ProxyFactoryBean에 설정 해주면 끝!
Service service;
ProxyFactoryBean proxyFactoryBean;
@Before
public void setUp(){
proxyFactoryBean = new ProxyFactoryBean();
proxyFactoryBean.setTarget(new ServiceImpl());
proxyFactoryBean.addAdvisor(new DefaultPointcutAdvisor(
new ServiceLoggingPointcur(),
new ServiceLoggingAdvice()));
}
@Test
public void logging(){
Service service = (Service) proxyFactoryBean.getObject();
service.hi();
service.hi2();
}
이렇게 하면 콘솔에
요런식으로 출력됩니다.
자세한 내용은 언젠간 출간될 Toby님의 스프링 책을 참조하세요.
'모하니? > Coding' 카테고리의 다른 글
[봄싹 DevTerms] 활성화 맞춤형 개발 (0) | 2010.01.21 |
---|---|
2010 대한민국 매쉬업 참가했습니다. (10) | 2010.01.20 |
개발 용어 한글화 프로젝트 "DevTerms" (0) | 2010.01.19 |
[웹 사이트 속도 향상 베스트 프랙티스 10] 자바스크립트 CSS 크기 줄이기 (2) | 2009.12.19 |
[스프링 테스트 확장] static member class를 빈으로 등록하는 테스트 로더 1 (6) | 2009.12.18 |
ProxyFactoryBean을 이용한 초간단 AOP 구현 (2) | 2009.12.16 |
[스프링 3.0 테스트 확장] 애노테이션 설정 기반 테스트 러너 만들기 4 - 일단 끝 (4) | 2009.12.16 |
[스프링 3.0 테스트 확장] 애노테이션 설정 기반 테스트 러너 만들기 3 (0) | 2009.12.15 |
[스프링 3.0 테스트 확장] 애노테이션 설정 기반 테스트 러너 만들기 2 (2) | 2009.12.15 |
[스프링 3.0 테스트 확장] 애노테이션 설정 기반 테스트 러너 만들기 1 (0) | 2009.12.15 |
스프링이 컴포넌트 스캔을 할 때 클래스로딩을 하지 않는다는 증거 (2) | 2009.12.09 |
저에겐 역시 AspectJ 가 쉽고 편하고 좋은거 같습니다.
저두요.ㅋㅋ
이건 그냥 스프링 AOP가 너무 마술 같아서 멀게 느끼시는 분들을 위한 초간단 예제에요.