java proxy , reflect

2015.04.20 11:17JAVA

Spring Proxy .. Spring Controller 에서 Transection 을 수행하기 위해  <apo:config proxy-target-class="true" > 를 true로 변경해주어야 한다.

AOP 사용시에 Proxy에서 실행하는데, Controller는 interface를 가지고 있지 않기 때문에 proxy가 없다.

Spring 의 AOP는 java 의 reflect 를 이용한다.


이렇게 해서 java porxy를 찾아보게 되었다.


그럼 proxy 테스트를 위해서는 몇가지 클래스와 인터페이스가 필요한다.

1. EmployManager   - Class

2. IEmployManager  - Interface

3. DebugHandler    - InvocationHandler 를 상속 받은 Class

4. ProxyTest  - Test Class



package proxy;


import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;


public class DebugHandler implements InvocationHandler {


public DebugHandler() {

}


private Object target;

public Object getTarget() {

return target;

}


public void setTarget(Object target) {

this.target = target;

}


@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

System.out.println("----------------------------");

System.out.println("Method 호출  = " + method);

return method.invoke(target, args);

}


}




가장 중요한 부분은  method.invoke(target, args);

이 부분으로써 완료후 대상객체로 처리를 전달한한다.



public static void main(String args[]) throws Exception {
IEmpManager empManager = new EmpManager();
DebugHandler debugHandler = new DebugHandler();
debugHandler.setTarget(empManager);
IEmpManager proxyManager = (IEmpManager)Proxy.newProxyInstance(IEmpManager.class.getClassLoader(), 
new Class[] {IEmpManager.class}, debugHandler);
proxyManager.getMessage();
System.out.println("end");
 

 }



상속받은 핸들러에 

프록시객체를 생성하여, 호출한다.



SAMPLE Code







'JAVA' 카테고리의 다른 글

FileInputStream vs FileReader 그리고 차이점  (0) 2016.03.15
Java Cache (LRU Cache) LinkedHachMap  (0) 2015.12.10
java proxy , reflect  (0) 2015.04.20
대용량 검색 방법 Mybatis ResultHander  (2) 2015.01.29
JAVA custom listener  (0) 2015.01.15
search Engine - sphinx  (0) 2013.05.21