자바 의 동적 에이전트

자신 이 이해 하 는 동적 대 리 는 네 가지 역할 을 포함한다.
1: 피 대리인 (Target. java)
2: 에이전트 (MyProxy. java)
3: 처리 기구 (MyHandler. java)
4: 처리 기구 에 사용 되 는 무기, struts 2 에 대응 하 는 차단기 (Interceptor. java)
코드 는 다음 과 같 습 니 다:
1: 피 대리인 (Target. java)
동적 에이 전 트 는 인터페이스의 기초 위 에 세 워 진 것 이기 때문에 우 리 는 인 터 페 이 스 를 대상 으로 프로 그래 밍 을 해 야 한다.
Interceptor 인터페이스 와 그 실현 클래스

package com.interceptor;

public interface TargetInterface {
	public void doSomething();
}

package com.interceptor;

public class Target implements TargetInterface {

	public void doSomething() {
		System.out.println("do something");
	}
	
}

2: 에이전트 (MyProxy. java)

package com.interceptor;
import java.lang.reflect.Proxy;

public class MyProxy {
	public Object getProxy(Object object){
		MyHandler myHandler = new MyHandler();
		myHandler.setObject(object);
		return Proxy.newProxyInstance(object.getClass().getClassLoader(),
					object.getClass().getInterfaces(),myHandler);
		
	}
}

3: 처리 기구 (MyHandler. java)

package com.interceptor;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {

	private Object object;
	private Interceptor interceptor = new Interceptor();
	public void setObject(Object object){
		this.object = object;
	}
	public Object invoke(Object arg0, Method arg1, Object[] arg2)
			throws Throwable {
		Object result = null;
		interceptor.before();
		
		result = arg1.invoke(object,arg2);
		
		interceptor.after();
		return result;
	}

}

4: 처리 기구 에 사용 되 는 무기, struts 2 에 대응 하 는 차단기 (Interceptor. java)

package com.interceptor;

public class Interceptor {
	public void before(){
		System.out.println("before");
	}
	
	public void after(){
		System.out.println("after");
	}
}

마지막 으로 우리 의 검증 클래스 입 니 다.

package com.interceptor;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TargetInterface  target = new Target();
		
		//    target     
		
		MyProxy myProxy = new MyProxy();
		TargetInterface proxy =(TargetInterface)myProxy.getProxy(target);
		proxy.doSomething();
	}

}

처리 프로 세 스 정리:
1: 테스트 클래스 클 라 이언 트 가 실 행 될 때 부터 프 록 시 클래스 에 의 해 계 승 된 인터페이스의 인용 이 되 었 습 니 다.(제 가 이해 하 는 동적 프 록 시 는 인터페이스 프로 그래 밍 과 관련 이 있 습 니 다. 바로 여기에 나타 난 것 입 니 다. 인터페이스 참조 정의)
2: 다음은 프 록 시 대상 (MyProxy myProxy = new MyProxy () 을 정의 합 니 다.) 프 록 시 대상 은 getProxy 방법 을 호출 하고 프 록 시 에 인 용 된 후 (TargetInterface) my Proxy. getProxy (target) 로 전 송 됩 니 다. 프 록 시 클래스 에 의 해 실 현 된 인터페이스 형식 으로 강제로 전 환 됩 니 다.
3: (my Proxy. getProxy (target) 에 깊이 들 어가 세 요.마 이 프 록 시 클래스 중 에
프 록 시 에 의 해 인용 되 는 것 을 보 았 습 니 다. 즉, 이것 (my Proxy. getProxy (target) 의 target 매개 변수 입 니 다.
(my Handler. setObject (object);) 에 의 해 처리 류 MyHandler 에 게 전달 되 었 습 니 다. 다음 네 번 째 는 M 인 H 가 사람 중 에 하 는 동작 을 분 석 했 습 니 다. 먼저 이것 (Proxy. new Proxy Instance (object. getClass (). getClassLoader (), object. getClass (). getInterfaces (), my Handler) 을 말 해 보 세 요.) 대리 류 의 new Proxy Instance 방법 은 무엇 을 하 는 것 입 니까?이 방법 은 MyProxy 대상 을 만 들 때 실례 화 됩 니 다.안에 있 는 세 번 째 인자 my Handler 를 주의 하 세 요.이 매개 변 수 는 우리 가 MyProxy 대상 을 만 들 때 처리 클래스 의 대상 을 전달 했다 는 것 을 설명 합 니 다.
4: 세 번 째 단계 에서 MyProxy 를 만 들 때 myHandler 대상 매개 변 수 를 실례 화 하 는 방법 을 전 달 했 습 니 다.그러면 우 리 는 MyHandler 방법 에 들 어가 서 그것 이 무엇 을 했 는 지 보 자.
너 는 이런 종류의 MyHandler 가 우리 의 주전 장 이라는 것 을 볼 수 있다.
그것 은 무엇 을 했 습 니까?
우선 이 인터페이스 (Invocation Handler) 를 실현 했다. 이 인터페이스 안의 방법 (invoke (Object arg 0, Method arg 1, Object [] arg 2) 이 우리 의 처리 핵심 이다.
invoke 방법 에 있 는 내용 (Object result = null;
interceptor.before();
result = arg1.invoke(object,arg2);
interceptor.after();
return result;)
object 인 스 턴 스 를 실행 하 였 습 니 다. 즉, 클 라 이언 트 에서 proxy 호출 방법 doSomething () 을 참조 하 였 을 때, 실행 방법 doSomething 전에 차단기 Interceptor before 방법 을 호출 하 였 으 며, 실행 후 after 방법 을 호출 하 였 습 니 다.
요약: 처리 라인: Client 는 MyProxy, MyProx 는 MyHandler, MyHandler 는 Interceptor 를 사용 합 니 다. 마지막 으로 우리 의 피 대리 류 Target 은 이렇게 처리 되 었 습 니 다.
위의 네 가지 역할 로 분석 하면 대리인 (Target) 에 의 해 대리 기구 대리 (MyProxy), 대리 기구 가 처리 기 구 를 초빙 하여 처리 하 는 것 (MyHandler) 이 고 처리 기 구 는 무기 (Interceptor) 를 사용 했다.
이상 은 천박한 분석 이 므 로 앞으로 천천히 완 선 될 것 이다.

좋은 웹페이지 즐겨찾기