프록시 - 구체 클래스 기반 프록시

박찬우·2024년 2월 14일
0

스프링

목록 보기
41/88

구체 클래스 기반 프록시

  • 인터페이스가 없어도 구체 클래스를 기반으로 프록시를 만들 수 있다
  • 상속을 이용하여 개발한다

예)


  • 서버
@Slf4j
public class ConcreteLogic {
    public String operation() {
        log.info("ConcreteLogic 실행");
        return "data";
    }
}
  • 프록시
@Slf4j
public class TimeProxy extends ConcreteLogic {

    private ConcreteLogic concreteLogic;

    public TimeProxy(ConcreteLogic concreteLogic) {
        this.concreteLogic = concreteLogic;
    }

    @Override
    public String operation() {
        log.info("TimeDecorator 실행");
        long startTime = System.currentTimeMillis();
        String result = concreteLogic.operation();
        long endTime = System.currentTimeMillis();
        long resultTime = endTime - startTime;
        log.info("TimeDecorator 종료 resultTime={}ms", resultTime);
        return result;
    }
}
  • 클라이언트
public class ConcreteClient {
    private ConcreteLogic concreteLogic;
    public ConcreteClient(ConcreteLogic concreteLogic) {
        this.concreteLogic = concreteLogic;
    }
    public void execute() {
        concreteLogic.operation();
    }
}
  • TEST
public class ConcreteProxyTest {

    // 클라이언트 - 서버
    @Test
    void noProxy() {
        ConcreteLogic concreteLogic = new ConcreteLogic();
        ConcreteClient client = new ConcreteClient(concreteLogic);
        client.execute();
    }

    // 클라이언트 - 프록시 - 서버
    // 시간 로그가 찍힘
    @Test
    void addProxy() {
        ConcreteLogic concreteLogic = new ConcreteLogic();
        TimeProxy timeProxy = new TimeProxy(concreteLogic);
        ConcreteClient client = new ConcreteClient(timeProxy);
        client.execute();
    }

}
profile
진짜 개발자가 되어보자

0개의 댓글