共四个类文件
1:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 该类用于创建代理类,用于动态生成一个代理对象 */ public class CreateProxy implements InvocationHandler { private Object target;//被代理点对象 //用于创建代理对象的方法 public Object create(Object target){ this.target = target; Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); return proxy; } /** * 代理对象要执行的方法 * @param proxy 代理类对象 * @param method 被代理对象的方法 * @param args 被代理对象方法的参数 * @return * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("在海淘搜索用户需要的产品,请稍等"); System.out.println("与用户对象确认商品"); //调用Person类中的shopping方法, method.invoke(target, args); System.out.println("完成本次海淘合作"); return null; } }
2:
/** * 动态代理,即通过Proxy代理类,接口和实现类之间可以不直接发生发生联系,而可以在运行期间实现动态关联 */ public class Person implements Subject{ @Override public void shopping() { System.out.println("付钱之后,买到想要的商品。"); } }
3:
public interface Subject { public void shopping(); }
4:
import org.junit.Test; public class TestDemo { @Test public void testProxy(){ CreateProxy cp = new CreateProxy();//创建代理对象的对象 Subject person = new Person(); Subject proxy = (Subject) cp.create(person); proxy.shopping(); } }