JDK 기반 동적 에이전트
참고: JDK는 인터페이스의 동적 에이전트만 지원하고 클래스의 동적 에이전트는 지원하지 않습니다.
먼저 Dog을 예로 들어 인터페이스를 씁니다.
package com.lbx.dao;
public interface Dog {
public void info();
public void run();
}
Dog 인터페이스의 실현
package com.lbx.dao.impl;
import com.lbx.dao.Dog;
public class DogImpl implements Dog {
@Override
public void info() {
// TODO Auto-generated method stub
System.out.println(" ");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(" RUN");
}
}
대상 프록시 대상은 방법 앞뒤에 삽입하는 방법이 필요합니다
package com.lbx.interceptor;
public class DogInterceptor {
public void method1(){
System.out.println(" ");
}
public void method2(){
System.out.println(" ");
}
}
키 코드(업무 처리)
package com.lbx.interceptor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHandler implements InvocationHandler {
//
private Object targer;
//
DogInterceptor di = new DogInterceptor();
// ,
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
if(method.getName().equals("info")){
di.method1();
result = method.invoke(targer, args);
di.method2();
}else {
result = method.invoke(targer, args);
}
return result;
}
//
public void setTarger(Object o){
this.targer = o;
}
}
대상 프록시 객체의 플랜트
package com.lbx.interceptor;
import java.lang.reflect.Proxy;
import com.lbx.dao.impl.DogImpl;
public class MyProxyFactory {
public static Object getProxy(Object object){
ProxyHandler handler = new ProxyHandler();
handler.setTarger(object);
return Proxy.newProxyInstance(DogImpl.class.getClassLoader(),
object.getClass().getInterfaces(), handler);
}
}
테스트 클래스
package com.lbx.test;
import com.lbx.dao.Dog;
import com.lbx.dao.impl.DogImpl;
import com.lbx.interceptor.MyProxyFactory;
public class Test {
public static void main(String[] args) {
//
Dog targerObject = new DogImpl();
Dog dog = null;
//
Object proxy = MyProxyFactory.getProxy(targerObject);
if (proxy instanceof Dog) {
dog = (Dog)proxy;
}
dog.info();
dog.run();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.