1. 대상 객체가 특정 메소드를 공개하는 인터페이스를 구현한다면 JDK의 java.lang.reflect.Proxy 클래스를 이용하며 이 클래스는 스프링이 필요한 인터페이스를 구현하는 새로운 클래스를 동적으로 생성시키고 충고와 엮으며 이들 인터페이스에 대한 모든 호출을 대상 객체에 프록시화 한다.
2. 대상 클래스가 어떤 인터페이스를 구현하고 있지 않다면 CGLIB이라는 라이브러리를 이용하여 대상클래스의 서브클래스를 생성 시킨다. 이 서브클래스를 생성시킴으로써 스프링은 충고를 엮을 수 있으며 서브클래스에 대한 호출을 대상 클래스에 위임 할 수 있다. 이런 유형의 프록시를 생성시에는 spring 배포 본의 lib/cglib 아래 모든 JAR 파일을 추가해야 한다. 이 경우 final 메소드는 충고를 받을 수 없으며(final Method는 대상클래스의 서브클래스를 생성해서 메소드를 재정의 해야 하는데 final인 경우 곤란함) 애플리케이션이 좀 더 느슨하게 결합되게 하기 위해 이 방법보단 인터페이스를 통해 프록시를 만드는 것이 선호된다.
댓글 없음:
댓글 쓰기