[ 인터페이스 기반 프록시 - 적용 ]

프록시를 사용하여 기존 코드를 전혀 수정 없이 로그 추적 기능을 도입해보자.

V1 기본 클래스 의존 관계

Untitled

V1 런타임 객체 의존 관계

Untitled

여기에 로그 추적용 프록시를 적용해보자.

V1 프록시 의존 관계 추가

Untitled

V1 프록시 런타임 객체 의존 관계

Untitled

컨트롤러 프록시 객체

@RequiredArgsConstructor
public class OrderControllerInterfaceProxy implements OrderControllerV1 {

    private final OrderControllerV1 target; // 실제 객체를 참조
    private final LogTrace logTrace;

    @Override
    public String request(String itemId) {

        TraceStatus status =  null;
        try {
            status = logTrace.begin("OrderController.request()");
            //target 호출
            String request = target.request(itemId); // 실제 객체의 메서드를 호출
            logTrace.end(status);
            return request;
        }catch (Exception e){
            logTrace.exception(status, e);
            throw e;
        }
    }

    @Override
    public String noLog() {
        return target.noLog();
    }
}