ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다이나믹 프록시
    프로그래밍/Java 2022. 5. 3. 17:42

    런타임(애플리케이션이 실행되는 도중)에 특정 인터페이스들을 구현하는 클래스 또는 인스턴스를 만드는 기술을 다이나믹 프록시라 한다.

     

    프록시 인스턴스  

    프록시 인스턴스는 Object Proxy.newProxyInstance(ClassLoader, Interfaces, InvocationHandler) 를 통하여 구현할 수 있다.

    BookService bookService = (BookService) Proxy.newProxyInstance(BookService.class.getClassLoader(), new Class[]{BookService.class},
    	new InvocationHandler() {
    		BookService bookService = new DefaultBookService();
    		@Override
    		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    			if (method.getName().equals("rent")) { System.out.println("aaaa");
    				Object invoke = method.invoke(bookService, args); System.out.println("bbbb");
    				return invoke;
    			}
    		return method.invoke(bookService, args); 
         }
    });

    하지만, 기능을 추가할 때마다 InvocationHandler 에 계속해서 조건을 추가해주어야하는데 이는 유연한 구조는 아니다.
    이러한 문제를 해결하기 위해 위 구조를 스프링이 정의한 인터페이스로 재 구현하였고, 그것이 스프링 AOP 이다.
    (위 같은 이유로 스프링 AOP 를 프록시 기반의 AOP 라 부르기도 한다.)



     

    정리

    다이나믹 프록시

    • 런타임에 인터페이스 또는 클래스의 프록시 인스턴스 또는 클래스를 만들어 사용하는 프로그래밍 기법

    다이나믹 프록시 사용처

    • 스프링 데이터 JPA
    • 스프링 AOP
    • Mockito
    • 하이버네이트 lazy initialzation

     

     

     

    참고

    백기선 - 더 더자바, 코드를 조작하는 다양한 방법

    '프로그래밍 > Java' 카테고리의 다른 글

    Stream  (0) 2022.05.04
    Lombok 동작원리  (0) 2022.05.03
    클래스 로더 (class loader)  (0) 2022.05.01
    JVM 구조  (0) 2022.04.30
    JDK, JRE, JVM 이해하기  (0) 2022.04.29
Designed by Tistory.