Open jinan159 opened 2 years ago
Proxy 란 특정 대상을 wrapping 해서, 해당 클래스 대신에 작업을 수행하는 클래스 입니다. 기존 기능에 추가적인 기능을 제공하거나 흐름을 제어하는 등 다양하게 활용될 수 있습니다.
Proxy 를 런타임에 동적으로 생성하는것을 Dynamic Proxy 라고 하는데요. Java 에서는 Dynamic Proxy 를 지원하기 위해 리플렉션 패키지에서 Proxy 클래스를 제공합니다. 하지만, interface 대상으로만 Proxy 를 생성할 수 있다는 단점이 있습니다.
CGlib 은 JDK Proxy 의 단점을 보완하기 위해, 상속을 이용하여 Proxy 를 생성합니다.
하지만 final class
이거나, 생성자가 하나뿐인데 private
인 경우
상속이 불가하기 때문에 Proxy 를 생성할 수 없다는 단점이 있습니다.
public final class NextSquad {
}
public class NextSquad {
private NextSquad() { }
}
AOP
,관점 지향
에 대한 내용은 Proxy 이슈의 내용을 벗어나는 범위이므로 다루지 않겠습니다.
Spring AOP 에서 특정 객체를 관점 지향적 객체(Proxy)로 만드는 것을 Weaving
이라고 합니다.
그리고 Spring AOP 는 위 두가지 방법(JDK Proxy
, CGlib
) 을 이용하여 Runtime Weaving
을 제공합니다.
Spring 은 이 두가지 방법을 적절히 활용하여 사용합니다.
interface 대상으로는 JDK Proxy
를 사용하고, interface 가 아닌 대상에 대해서는 CGlib
을 이용하여 proxy 를 생성합니다.
참고자료
Proxy에 대해서 설명해주세요.
CGLIB, JDK Proxy
키워드
ex)
GCLIB
,Proxy
,Dynamic Proxy