디자인 모드 - 동적 에이전트
8029 단어 디자인 모드
(1) Interface Invocation Handler: 이 인터페이스 에서 하나의 방법 만 정 의 했 습 니 다. Public object invoke (Object obj, Method method, Object [] args) 가 실제 사용 할 때 첫 번 째 매개 변 수 는 일반적으로 프 록 시 클래스 를 말 합 니 다. method 는 프 록 시 방법 입 니 다. 예 를 들 어 상기 request (), args 는 이 방법의 매개 변수 배열 입 니 다.이 추상 적 인 방법 은 대리 류 에서 동태 적 으로 실현 된다.
(2) Proxy: 이 종 류 는 동적 에이전트 클래스 로 상례 의 Proxy Subject 와 유사 한 역할 을 하 며 다음 과 같은 내용 을 포함한다.
protected Proxy (InvocationHandler h): 구조 함수 로 내부 의 h 에 값 을 부여 합 니 다.
static Class getProxyClass (ClassLoader loader, Class [] interfaces): 하나의 프 록 시 클래스 를 얻 었 습 니 다. 그 중에서 loader 는 클래스 로 더 이 고 interfaces 는 실제 클래스 가 가지 고 있 는 모든 인터페이스의 배열 입 니 다.
static Object newProxyInstance (ClassLoader loader, Class [] interfaces, InvocationHandler h): 프 록 시 클래스 의 인 스 턴 스 를 되 돌려 줍 니 다. 되 돌아 온 프 록 시 클래스 는 프 록 시 클래스 로 사용 할 수 있 습 니 다. (피 프 록 시 클래스 가 Subject 인터페이스 에서 설명 한 방법 을 사용 할 수 있 습 니 다)
Dynamic Proxy 란 이러한 class 입 니 다. 실행 할 때 생 성 된 class 입 니 다. 생 성 할 때 interface 를 제공 해 야 합 니 다. 그리고 이 class 는 이러한 interface 를 실현 했다 고 주장 합 니 다.너 는 당연히 이 class 의 인 스 턴 스 를 이 interface 의 어떤 것 으로 도 사용 할 수 있다.물론 이 Dynamic Proxy 는 프 록 시 입 니 다. 실질 적 인 작업 을 대신 하지 않 습 니 다. 인 스 턴 스 를 생 성 할 때 handler 를 제공 하여 실제 작업 을 인수 해 야 합 니 다.
동적 에이전트 만 들 기:
1. 인터페이스 Invocation Handler 를 실현 하 는 클래스 를 만 듭 니 다. invoke 방법 을 실현 해 야 합 니 다. 2. 프 록 시 클래스 와 인 터 페 이 스 를 만 듭 니 다. 3. 프 록 시의 정적 방법 인 new Proxy Instance (ClassLoader loader, Class [] interfaces, Invocation Handler h) 를 통 해 프 록 시 4 를 만 듭 니 다. 프 록 시 호출 방법 을 통 해
동적 에이전트 의 장점:
디 결합 을 편리 하 게 실현 할 수 있 습 니 다. AOP 밑 에 있 는 것 은 주로 자바 의 이 동적 대 리 를 통 해 이 루어 집 니 다.
예 를 들 어 동적 에이전트 설명:
1. 자바 프로젝트 만 들 기
2. 프 록 시 인터페이스 만 들 기
package com.proxy.dynamicProxy;
public interface Foo
{
public int deleteUserById(int userId);
public void findAllUser();
}
3. 프 록 시 인터페이스의 실현 클래스 만 들 기
package com.proxy.dynamicProxy;
public class FooImpl implements Foo
{
@Override
public int deleteUserById(int userId)
{
System.out.println(" ..");
return 1;
}
@Override
public void findAllUser()
{
System.out.println(" ..");
}
}
4. InvocationHandler 구현 클래스 만 들 기
package com.proxy.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ComonInvocationHandler implements InvocationHandler
{
private Object obj; //
public ComonInvocationHandler(){
}
public ComonInvocationHandler(Object target)
{
obj = target;
}
@Override
// , invoke
/**
* :
* proxy:
* method:
* args:
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("before calling......");
System.out.println(" : "+method.getName());
Object result = method.invoke(obj, args);
System.out.println("after calling.....");
return result;
}
}
5. 대상 을 지정 하기 위해 프 록 시 대상 을 만 드 는 클래스 만 들 기
package com.proxy.dynamicProxy;
import java.lang.reflect.Proxy;
/**
*
* Proxy.newProxyInstance(loader, interfaces, h): ,
interfaces , InvocationHandler invoke
* loader -
* interfaces -
*
*/
public class ProxyFactory
{
public static Object getProxy(Object target)
{
Class<?> classType = target.getClass();
ComonInvocationHandler handler = new ComonInvocationHandler(target);
return Proxy.newProxyInstance(classType.getClassLoader(),
classType.getInterfaces(), handler);
}
}
6. 테스트 클래스
package com.proxy.dynamicProxy;
public class Client
{
public static void main(String[] args)
{
// Foo , target
Foo foo = new FooImpl();
// target
Foo proxyFoo = (Foo) ProxyFactory.getProxy(foo);
System.out.println(" : "+proxyFoo.deleteUserById(1));
proxyFoo.findAllUser();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.