해결된 질문
작성
·
213
·
수정됨
3
콘크리드프록시를 생성 할 때 기존 구체를 상속을 받고 오버라이딩 할 때 아래 예시와 같이 부모 메소드를 super를 통해서 호출이 가능한데요
public class OrderControllerConcreteProxy extends OrderControllerV2 {
private final LogTrace logTrace;
public OrderControllerConcreteProxy(OrderServiceV2 orderService, LogTrace logTrace) {
super(orderService);
this.logTrace = logTrace;
}
@Override
public String request(String itemId) {
TraceStatus status = null;
try {
status = logTrace.begin("OrderController.request()");
//target 호출
String result = super.request(itemId);
logTrace.end(status);
return result;
} catch (Exception e) {
logTrace.exception(status, e);
throw e;
}
}
@Override
public String noLog() {
return super.noLog();
}
}
이렇게 super를 통해서 호출하지 않고 OrderControllerV2를 따로 new 해서 멤버 변수로 받고 그 원본 구현체를 호출하는 이유가 있을까요?
답변 1
3
안녕하세요. 손영민님
프록시와 원본을 하나로 같이 사용하면 되지 않을까요? 라는 질문으로 이해했습니다.
프록시는 원본 객체를 상속 받기 때문에 프록시에서 오버라이딩 한 기능이 호출되어 버릴 수 있습니다.
이런 문제가 발생하지 않도록 프록시 객체와 원본 객체를 명확하게 분리하기 위해서 별도로 나누게 됩니다.
감사합니다.