接口
public interface Subject { public abstract void shopping(); }
实现类
public class Saler implements Subject { @Override public void shopping() { System.out.println("买东西"); } }
/** * 此类用于动态生成代理对象,需要实现InvocationHandler接口,重写invoke方法 */ public class CreateProxy implements InvocationHandler { //被代理的对象 private Object object; //此方法是用来生成代理对象,返回代理对象 public Object create(Object object) { this.object = object; Object o = Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); return o; } /** * 代理对象执行的被代理对象的方法,实为执行的是此方法,即在此方法中添加业务代码 * * @param proxy 代理对象 * @param method 被代理对象的方法 * @param args 被代理对象方法的参数 * @return * @throws InvocationTargetException * @throws IllegalAccessException */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("买之前货比三家"); System.out.println("确定价格"); method.invoke(object, args); System.out.println("心满意足"); return null; } }
//测试方法
public class ProxyTest { @Test public void test(){ Subject saler = new Saler(); CreateProxy createProxy = new CreateProxy(); Subject o = (Subject) createProxy.create(saler); o.shopping(); //调用Invoke方法 } }