ITest.java:
public interface ITest {
public void test(String str);
}
TestImpl1.java:
public class TestImpl1 implements ITest {
@Override
public void test(String str) {
System.out.println(str + "1");
}
}
TestImpl2.java:
public class TestImpl2 implements ITest {
@Override
public void test(String str) {
System.out.println(str + "2");
}
}
TestProxy.java:
//JDK动态代理代理类
public class TestProxy implements InvocationHandler {
private Object target;
public TestProxy(Object target) {
super();
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println(method.getName() + " " + args);
method.invoke(target, args);
System.out.println(method.getReturnType());
return null;
}
//取得代理对象
public Object getInstance() {
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
}
Test.java
public class Test {
public static void main(String[] args) {
ITest test1 = (ITest) new TestProxy(new TestImpl1()).getInstance();
ITest test2 = (ITest) new TestProxy(new TestImpl2()).getInstance();
test1.test("T");
test2.test("T");
}
}