ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java Proxy 기능으로 AOP
    카테고리 없음 2023. 4. 18. 12:31

    proxy 기능으로 AOP를 만들어 보자!

    java.lang.reflect 패키지에 InvocationHandler 인터페이스가 존재한다. 이 인터페이스를 이용해 AOP를 구현할 수 있다. 간단히 어떤수의 두배하는 메소드를 만들어보자
    class TwiceImpl implements Twice {
    
        @Override
        public int twice(int x) {
            return x * 2;
        }
    }
    
    interface Twice {
        int twice(int x);
    }
    
    이 코드를 사용하려면 이렇게 하면 된다. 위의 클래스의 인터페이스를 만든이유는 인터페이스가 있어야 java의 Proxy AOP를 만들수있다.
    Twice twice = new TwiceImpl();
    System.out.println(twice.twice(5));
    
    이제 InvocationHandler 인터페이스를 이용하여 AOP를 구현해보자
    class JavaProxyHandler implements InvocationHandler {
        private Object target;
    
        public JavaProxyHandler(Object target) {
            this.target = target;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("메소드 호출 전");
            int result = (int) method.invoke(target, args);
            System.out.println("메소드 호출 후");
            return result;
        }
    }
    
    이제 Proxy가 구현되었다. 그럼 Proxy 객체로 다시 호출해보자!
    Twice twice = new TwiceImpl();
    Class<? extends Twice> twiceGetClass = twice.getClass();
    Twice twiceProxy = (Twice) Proxy.newProxyInstance(
            twiceGetClass.getClassLoader(),
            twiceGetClass.getInterfaces(),
            new JavaProxyHandler(twice));
    System.out.println(twiceProxy.twice(5));
    
    그럼 결과는 다음과 같을 것이다.
    메소드 호출 전
    메소드 호출 후
    10
    
    
    참고 : AspectJ로 구현한 AOP

    댓글

Designed by Tistory.