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' 카테고리의 다른 글
Java Cache (LRU Cache) LinkedHachMap (0) | 2015.12.10 |
---|---|
기본공부 (0) | 2015.12.01 |
대용량 검색 방법 Mybatis ResultHander (2) | 2015.01.29 |
JAVA custom listener (0) | 2015.01.15 |
search Engine - sphinx (0) | 2013.05.21 |