1.接口
package com.DynamicProxy1;
public interface Rent {
void save();
void del();
void updata();
}
2.被代理类
代理类0
package com.DynamicProxy1;
public class Host implements Rent{
@Override
public void save() {
System.out.println("保存文件");
}
@Override
public void del() {
System.out.println("删除文件");
}
@Override
public void updata() {
System.out.println("更新文件");
}
}
代理类1
package com.DynamicProxy1;
public class Host1 implements Rent{
@Override
public void save() {
System.out.println("123保存");
}
@Override
public void del() {
System.out.println("123删除数据");
}
@Override
public void updata() {
System.out.println("123更新数据");
}
}
3.代理类(构建一个handler类来实现InvocationHandler接口)
package com.DynamicProxy1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//通过实现 InvocationHandler 接口创建自己的调用处理器
public class ProxyInvocationHandler implements InvocationHandler {
private Object object;
public ProxyInvocationHandler(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
method.invoke(object,args);
return null;
}
}
4.执行动态代理
package com.DynamicProxy1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Demo {
public static void main(String[] args) {
//创建实例对象
Rent host = new Host();
Rent host1 = new Host1();
//创建代理类
InvocationHandler handler = new ProxyInvocationHandler(host);
InvocationHandler handler1 = new ProxyInvocationHandler(host1);
//通过Proxy类的静态方法newProxyInstance返回一个接口的代理实例
//针对不同的代理类,传入相应的代理程序控制器InvocationHandler。
Rent proxyHello = (Rent) Proxy.newProxyInstance(host.getClass().getClassLoader(), host.getClass().getInterfaces(),handler);
proxyHello.save();
proxyHello.del();
Rent proxyHello1 = (Rent) Proxy.newProxyInstance(host1.getClass().getClassLoader(), host1.getClass().getInterfaces(),handler1);
proxyHello1.save();
proxyHello1.del();
}
}
输出结果
保存文件
删除文件
123保存
123删除数据