话不多说,直接上代码
1.实现要代理的接口类
public interface People {
String getName();
}
2.实现此接口,
public class PeopleImpl implements People {
@Override
public String getName() {
System.out.println("执行peopleImpl方法");
return null;
}
}
3.创建一个类并实现 Invocationhandler接口,写些自定义的功能
public class MyInvocationhandler implements InvocationHandler {
// 代理类真实对象
private Object object;
// 构造函数,给真实对象赋值
public MyInvocationhandler (Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行前handler方法");
Object invoke = method.invoke(object, args);
System.out.println("执行后Handelr方法");
return invoke;
}
}
4.到此就已经差不多了,写个main方法测试
public static void main(String[] args) {
// 创建要代理的类
People people = new PeopleImpl();
// 创建自定义的handler并传入要代理的接口的实例,初始化
MyInvocationhandler myInvocationhandler = new MyInvocationhandler(people);
// 创建目标对象的代理
People proxyInstance = (People) Proxy.newProxyInstance(myInvocationhandler.getClass().getClassLoader(),
people.getClass().getInterfaces(), myInvocationhandler);
// 代理对象执行相关方法
proxyInstance.getName();
}
输出:
执行前handler方法
执行peopleImpl方法
执行后Handelr方法
到此就完成了