Java Dynamic Proxy는 Java에 연결된 API에서 설명되었으므로 여기에 쓰지 않을 것입니다. 내가 이해하는 것 :
특정 인터페이스에서 특정 메소드의 기능을 확장하면 프록시입니다. 프록시는 프록시 인스턴스와 관련된 통화 핸들러 개체를 통한 통화 메소드입니다.
예를 들어 보자.
인터페이스 :
공개 인터페이스 Num {void show (); int getnum (); int getproduct (int x);} 구현 클래스 :
공개 클래스 mynum은 num {@override public int getnum () {return 3; } @override public int getProduct (int x) {return x; } @override public void show () {System.out.println ( "기본 메소드는 숫자 99를 인쇄"); }} 먼저 API에서 호출 메소드가 설명되는 방법을 살펴 보겠습니다.
즉, 통화 처리기는 인터페이스의 구현 클래스 객체에 메소드 개체를 나타내는 기본 메소드를 호출합니다.
프록시를 구현하는 첫 번째 방법 :
공개 클래스 numproxy {private object num; // 생성자 메소드를 통해 인터페이스의 구현 클래스 객체를 구성합니다. public numproxy (object num) {this.num = num; } public Object getNumbyProxy () {Object NumProxy = proxy.NewProxyInstance (num.getClass (). getClassLoader (), new class [] {num.class}, new invoctionHandler () { /*** 메소드에 해당하는 메소드 인스턴스 : 내가 이해하는 것은 무엇입니까? 실제 방법*/ @override public object invoke (객체, args)는 {객체 obj = null (정수) println (proxy : getProduct (). NumProxy를 반환하십시오. }} 프록시를 구현하는 두 번째 방법 : InvocationHandler 인터페이스를 구현하여
공개 클래스 NumProxyImpl은 invocationHandler를 구현합니다. {// 여기서 인터페이스 유형을 구체화했으며 객체 개인 NUM으로 작성되지 않았습니다. public numproxyimpl (num num) {this.num = num; } @override public object invoke (오브젝트 프록시, 메소드 메소드, 개체 [] args) 던지기 가능 {object obj = null; String MethodName = method.getName (); if ( "getProduct".Equals (MethodName)) {System.out.println ( "proxy : getProduct () start"); obj = method.invoke (num, args); obj = (정수) obj * 2; System.out.println ( "proxy : getProduct () end"); } else if ( "show".equals (methodName)) {System.out.println ( "proxy : show () start"); obj = method.invoke (num, args); System.out.println ( "proxy : show () end"); } return obj; }} 테스트 코드 :
public class testnum {public static void main (String [] args) {// test numproxy np = new numproxy (new mynum ()); num numproxy = (num) np.getnumbyproxy (); int x = numproxy.getProduct (2); System.out.println (x); numproxy.show (); System.out.println ( "------------------------------------------------- numproxyimpl npi = new numproxyimpl (new mynum ()); num numpro = (num) proxy.newproxyInstance (num.class.getClassLoader (), new Class [] {num.class}, npi); int n = numpro.getProduct (3); System.out.println (N); numpro.show (); }} 콘솔 결과 :
두 번째 방법은 약간 혼란 스럽습니다. 당신이 가지고 있는지 모르겠습니다. 즉, NumProxyImpl의 Invoke 메소드라고 불립니다. 그러나 실행되었습니다. 예, 이것을보기 위해 내려 가자.
귀찮고 싶지 않다면 기억하십시오.
예를 들어, 인코딩 프로세스를 사용하여 프록시를 사용하고 다음에 예제를 작성할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.