인프런 커뮤니티 질문&답변

이무님의 프로필 이미지
이무

작성한 질문수

스프링 핵심 원리 - 고급편

JDK 동적 프록시 - 적용2

newProxyInstance 클래스 로더

작성

·

245

0

예제에서보면 newProxyInstance 매개변수로 들어가는 클래스 로더는 프록시 타겟 클래스에서 가져오는걸로 맞추신 것 같은데

그렇게 해야하는 이유가 있을까요?

예를들어 Controller의 프록시를 만들 때 Controller.class.getClassLoader가 아닌 Service.class.getClassLoader로 하면 안되는건가요?

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

newProxyInstance 메소드는 동적으로 프록시 객체를 생성하는데 사용되는 메소드입니다. 이 메소드는 프록시 클래스를 생성하기 위해 클래스 로더를 사용합니다.

프록시의 목적은 원본 객체에 대한 접근을 제어하고, 추가적인 동작을 수행하기 위해서 사용됩니다. 따라서 프록시 클래스는 원본 클래스와 같은 클래스 로더를 사용해야 합니다.

만약 Controller 클래스의 프록시를 생성한다면, Controller.class.getClassLoader를 사용하는 것이 가장 이상적입니다. 이유는 Controller 클래스와 관련된 메소드 호출을 가로채고 추가적인 로직을 수행하기 위해서는 Controller 클래스의 로더를 사용해야 하기 때문입니다.

Service 클래스로 로더를 사용한다면, 다른 클래스와의 관계에서 문제가 발생할 수 있습니다. 기능적인 부분에서 문제가 생길 수 있으며, 클래스 로더의 가시성과 무관하게 로딩이 제대로 이루어지지 않을 수 있습니다.

따라서 프록시 클래스를 생성할 때는 원본 클래스의 클래스 로더를 사용해야 합니다. 감사합니다.

이무님의 프로필 이미지
이무

작성한 질문수

질문하기