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;
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 호출 후 ==> 이걸로 리턴....
![]() |
![]() |
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/16)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/16)[기업100%환급]안드로이드개발자과정
(6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/16)안드로이드개발자과정
(6/17)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/18)C#,ASP.NET마스터
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말(10:00~17:50) 개강
(6/14)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/14)C#,ASP.NET마스터
(6/21)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/14)안드로이드개발자과정
(6/14)개발자를위한PLSQL,SQL튜닝,힌트
(6/15)Spring3.X, MyBatis, Hibernate실무과정
(6/21)SQL초보에서 Schema Object까지
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말저녁(18:30~22:20) 개강
(6/21)JAVA,Network&WEB&Framework
(6/21)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/16)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/16)[기업100%환급]안드로이드개발자과정
(6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/16)안드로이드개발자과정
(6/17)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/18)C#,ASP.NET마스터
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말(10:00~17:50) 개강
(6/14)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/14)C#,ASP.NET마스터
(6/21)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/14)안드로이드개발자과정
(6/14)개발자를위한PLSQL,SQL튜닝,힌트
(6/15)Spring3.X, MyBatis, Hibernate실무과정
(6/21)SQL초보에서 Schema Object까지
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말저녁(18:30~22:20) 개강
(6/21)JAVA,Network&WEB&Framework
(6/21)SQL기초에서실무까지
댓글 없음:
댓글 쓰기