动态代理
创建接口
public interface TestDemo {
void test1();
void test2();
}
实现接口
public class TestDemoImpl implements TestDemo {
@Override
public void test1() {
System.out.println("test1方法执行");
}
@Override
public void test2() {
System.out.println("test2方法执行");
}
}
创建代理类
public class ProxyDemo implements InvocationHandler {
private Object object;
public ProxyDemo(Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName()+"开始执行");
Object o = method.invoke(object, args);
System.out.println(method.getName()+"执行完毕");
return o;
}
}
使用代理类
TestDemo testDemo = new TestDemoImpl();
//创建invocationhandler
InvocationHandler invocationHandler = new ProxyDemo(testDemo);
/**
* 使用proxy创建对象
* 参数1:指定对象的类加载器
* 参数2:指定对象的接口类
* 参数3:代理类
*/
TestDemo o = (TestDemo)
Proxy.newProxyInstance(
testDemo.getClass().getClassLoader(),
testDemo.getClass().getInterfaces(),
invocationHandler);
o.test1();
System.out.println("-------------------");
o.test2();
运行结果
test1开始执行
test1方法执行
test1执行完毕
-------------------
test2开始执行
test2方法执行
test2执行完毕
Process finished with exit code 0
- 注:一个对象想要通过Proxy.newProxyInstance方法被代理此对象必须要有相应的接口