일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- mybatis
- Netty
- weblogic 10
- cassandra
- Hibernate
- Redis Sentinel
- docker-compose
- Docker Compose
- WebLogic
- grafana
- KAFKA
- Spring Open Feign
- spring boot redis
- QueryDSL
- Airflow
- coalesce
- JPA
- jmeter
- spring boot
- Selenium
- docker
- netflix oss
- spring cloud
- ChannelPipeline
- redis
- RabbitMQ
- argo cd
- MySQL
- docker compose mysql
- vue.js
- Today
- Total
IT.FARMER
java proxy , reflect 본문
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 |