ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] AOP 코드 구현하기
    프로그래밍 공부/Spring 2021. 5. 5. 13:14

     

    뉴렉처 강사님의 동영상 강의를 정리한 글입니다.

     

     

    Proxy 이용하여 업무 로직, 부가 로직 분리하기

     

    package spring.aop;
    
    
    import java.lang.reflect.Method;
    
    import org.springframework.cglib.proxy.InvocationHandler;
    import org.springframework.cglib.proxy.Proxy;
    
    import spring.aop.entity.Exam;
    import spring.aop.entity.NewlecExam;
    
    public class Program {
    	
    	public static void main(String[] args) {
    		
    		Exam exam = new NewlecExam(1,1,1,1);
    		
    		Exam proxy = (Exam)Proxy.newProxyInstance(NewlecExam.class.getClassLoader(), 
    				new Class[] {Exam.class}, 
    				new InvocationHandler() {
    
    					@Override
    					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
    						long start = System.currentTimeMillis();
    						
    						Object result = method.invoke(exam, args);
    						
    						long end = System.currentTimeMillis();
    						String message = (end-start) +"ms 시간이 걸렸습니다.";
    						System.out.println(message);
    						
    						return result;
    					}
    			
    				}
    				);
    		
    		System.out.printf("total is %d\n", proxy.total());
    	}
    }
    

     

    newProxyInstance

    : proxy 객체를 생성하는 메서드 (loader, interfaces, handler)를 파라미터로 갖는다.

     

    - loader: 프록시 클래스를 정의하는 클래스 로더 (클래스명.class.getClassLoader())

    - interfaces: 프록시 클래스가 구현하는 인터페이스 리스트 (new class[] {인터페이스명1.class, 인터페이스명2.class .. })

    - handler: 메서드 호출을 처리하는 핸들러 (new InvocationHandler(){public object invoke(...){...}})

    댓글

Designed by Tistory.