레이블이 InvocationHanlder인 게시물을 표시합니다. 모든 게시물 표시
레이블이 InvocationHanlder인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 18일 토요일

[JDK PROXY예제,자바프록시예제]InvocationHanlder를 이용한 프록시메소드의 리턴값 가로채기, 자바교육, JAVA교육, 자바동영상, JAVA학원

 







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,

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...