本文共 2241 字,大约阅读时间需要 7 分钟。
public interface Person { void giveMoney();}
2.2 创建接口的实现类
public class Student implements Person { private String name; public Student() { } public Student(String name) { this.name = name; } public String getName() { return name; } public void giveMoney() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name+"上交班费50元"); }}
2.3 创建StuInvocationHandler类来继承InvocationHandler这个接口
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class StuInvocationHandler implements InvocationHandler { private Student target; public StuInvocationHandler() { } public StuInvocationHandler(Student target) { this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //method:代表代理对象要执行的真实对象的方法 give(); //代理对象要替真实对象执行的方法 Object result = method.invoke(target, args); take(); //这里的result==null,所以一般没有什么用 return result; } public Object getProxy(){ return Proxy.newProxyInstance(Person.class.getClassLoader(), target.getClass().getInterfaces(), this); } public void give(){ System.out.println("班长要收班费啦"); } public void take(){ System.out.println("班长收了" + target.getName()+"的班费啦"); }}
2.4 测试类
public class ProxyTest { public static void main(String[] args) { Student person = new Student("郝一凡"); StuInvocationHandler handler = new StuInvocationHandler(person); Person student = (Person) handler.getProxy(); //调用这个方法,会动态的调用StuInvocationHandler中的invoke方法。 student.giveMoney(); }}
下面先看一下输出:
转载地址:http://thohn.baihongyu.com/