<< 2007년 12월 30일 (일) | | 2008년 1월 1일 (화) >>

CGLIB를 이용한 프록시 객체 사용하기

1. 소스 다운 로드

  • cglib-2.1_3.jar - ASM 모듈을 필요로 하는 버전
  • cglib-nodep-2.1_3.jar - ASM 모듈이 포함되어 있는 버전

2. CGLIB를 사용하여 프록시를 생성할 때에는 크게 크게 두가지 작업을 필요함

  • net.sf.cglib.proxy.Enhancer 클래스를 사용하여 원하는 프록시 객체 들고
  • net.sf.cglib.proxy.Callback을 사용하여 프록시 객체 조작 등 두가지 방법으로 프록시 생성함

3. MethodInterceptor를 사용하여 프록시 객체 처리

  • CGLIB가 제공하는 Callback 중 가장 많이 사용되는 것은 net.sf.cglib.proxy.MethodInterceptor임
  • Enhancer.setCallback()을 통해서 MethodInterceptor를 지정하면, 프록시의 메소드를 호출할 때 마다 MethodInterceptor.intercept() 메소드가 호출되고 MethodInterceptor는 프록시와 원본 객체 사이에 위치하여 메소드 호출을 조작할 수 있도록 해 줌

*. 샘플 소스
*. 실행결과

  1. public void MyClass.method()
  2. MyClass.method()
  3. public void MyClass.method2()
  4. MyClass.method2()

4. CallbackFilter를 사용하여 알맞은 Callback 실행

여러개의 Callback 중에서 상황에 따라서 원하는 Callback을 사용하고 싶은 경우 net.sf.cglib.proxy.CallbackFilter 인터페이스를 사용함

* 샘플소스
*. 실행 결과

  1. public void MyClass.method()
  2. MyClass.method()
  3. MyClass.method2()

5. Mixin

Proxy & Interceptor

*. 샘플 소스
*. 실행 결과

  1. MyInterfaceAImpl.methodA()
  2. MyInterfaceBImpl.methodB()
태그 :