개발일기장

CGLIB proxy ... 본문

JAVA

CGLIB proxy ...

게슬 2023. 11. 26. 15:35
728x90

일반 java proxy 말고

CGLIB에서 제공하는 proxy사용법

1. MethodInterceptor를 구현

methodProxy 객체가 있는것 말고는 여기까지는 비슷함

그리고 method.invoke보다 저게 더 빠르다고 하는데 몰루겠슴.

@Slf4j
public class TimeMethodInterceptor implements MethodInterceptor {

   private final Object target;

    public TimeMethodInterceptor(Object target) {
        this.target = target;
    }

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        log.info("TimeProxy 실행");
        long startTime = System.currentTimeMillis();

        Object result = methodProxy.invoke(target, args); // <- 이게 좀 더 빠르대요..
        //Object result = method.invoke(target, args);

        long endTime = System.currentTimeMillis();
        long resultTime = endTime - startTime;
        log.info("TimeProxy 종료 resultTime={}",resultTime);

        return result;
    }
}

 


2. Enhancer로 호출

이거는 Interface가 아닌 객체를 직접 사용함

그래서 Enhancer에 class / callback을 등록해주고 Proxy를 생성해서 호출하면 끝남.

    void cglib(){
        // interface가 없는 놈.
        ConcreteService target = new ConcreteService();


        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(ConcreteService.class); // 구체 class 상속 받아서 생성 할 수 있음
        enhancer.setCallback(new TimeMethodInterceptor(target)); // method interceptor 넣어줌
        ConcreteService proxy = (ConcreteService) enhancer.create(); //proxy 만들기

        log.info("targetClass={}", target.getClass());
        log.info("proxyClass={}", proxy.getClass());

        proxy.call();
    }

 

근대 이거랑 java proxy랑 뭐가 다른지 몰루겠슴.

728x90

'JAVA' 카테고리의 다른 글

Proxy ...  (1) 2023.11.26
Reflection ...  (0) 2023.11.26
Java 데이터 접근 기술 - transaction & exception(Check,UnCheck) (3)  (0) 2023.02.08
Java 데이터 접근 기술 - connection pool (2)  (0) 2023.02.06
Java 데이터 접근 기술 - jdbc (1)  (0) 2023.02.05
Comments