[JDK PROXY예제,자바프록시예제]InvocationHanlder를 이용한 프록시메소드의 리턴값 가로채기, 자바교육, JAVA교육, 자바동영상, JAVA학원
http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=695&page=2
ojc.asia
Target Class의 프록시 메소드인 sayHello의 리턴값이 InvocationHandler구현 클래스 HelloWorldHandler의 invoke 메소드의 리턴값으로 대체됨을 확인 할 수 있는데 예제를 이해하자.
InvocationHandler 인터페이스는 java.lang.reflect 패키지의 인터페이스이며 JDK1.3 이후에 나온 것 인데 프록시 호출 핸들러에 의해 구현되어야 하는 메소드 이다.
이 프록시 기반 프로그래밍의 구조를 이해하는 것은 Spring AOP 프로그래밍을 이해하는데 도움이 된다.
package onj.edu.jdkproxy;
//jdk.lanf.Proxy를 이용하는 방법은 Proxy 인터페이스를 이용하여
//객체를 생성하므로 반드시 인터페이스 필요, 인테페이스가 없는 경우 CGLIB이용
public interface HelloWorld {
public String sayHello(String msg);
}
package onj.edu.jdkproxy;
public class HelloWorldImpl implements HelloWorld{
public String sayHello(String msg) {
return "오라클자바에 오신것을 환영 합니다.... " + msg;
}
}
package onj.edu.jdkproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
private Object targetObj = null;
public HelloWorldHandler(Object target) {
this.targetObj = target;
}
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("method name : " + method.getName());
Object o = method.invoke(targetObj, args);
System.out.println("method.invoke return값 : " + o);
return "이걸로 리턴....";
}
}
package onj.edu.jdkproxy;
import java.lang.reflect.Proxy;
/**
* 객체의 메쏘드를 호출할 때 직접 객체를 호출하는 방식이 아니라,
* HelloHandler라는 프록시 객체를 이용하는 방식이다.
* HelloHandler는 invoke라는 메쏘드를 통해서 지정된 객체의 함수를 실행하는데
*/
public class JdkProxyClient {
public static void main(String[] args) {
try {
Class[] arrClass = {HelloWorld.class};
//HelloWorldHandler에는 target 객체를 인자로 넣어준다.
HelloWorldHandler handler = new HelloWorldHandler(new HelloWorldImpl());
HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance
(HelloWorld.class.getClassLoader(), arrClass, handler);
String s = proxy.sayHello("your name...");
System.out.println("Proxy 호출 후 ==> " + s);
} catch(Exception e) {
e.printStackTrace();
}
}
}
[결과]
method name : sayHello
method.invoke return값 : 오라클자바에 오신것을 환영 합니다.... your name...
Proxy 호출 후 ==> 이걸로 리턴....
#자바프록시, #프록시란, #자바교육, #자바학원, #JAVA교육, #JAVA학원, #InvocationHanlder, 자바프록시, 프록시란, 자바교육, 자바학원, JAVA교육, JAVA학원, InvocationHanlder,