from Dictionary - JDK Dynamic Proxy
Jdk Dynamic Proxy
인터페이스를 기반으로 프록시르 생성한다.
java.lang.reflect의 InvocationHandler를 구현하면 된다. 내부에 public Object invoke(Object proxy, Method method, Object[] args)
메소드가 존재한다. relfect의 invoke와 구조가 유사하다.
public class Target implements TargetInterface{
@Override
public void echo(String text) {
System.out.println(text);
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class TargetHandler implements InvocationHandler {
private TargetInterface target;
public TargetHandler(TargetInterface target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
Object result = method.invoke(target, args);
System.out.println("after");
return result;
}
}
public interface TargetInterface {
public void echo(String text);
}
import org.junit.jupiter.api.Test;
import java.lang.reflect.Proxy;
public class ProxyTest {
@Test
public void test() {
TargetInterface tar = new Target();
TargetHandler handler = new TargetHandler(tar);
TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(
TargetInterface.class.getClassLoader(),
new Class[] {TargetInterface.class},
handler
);
proxy.echo("HI");
}
}