JDK代理的小例子
1、首先新建接口
package relation; /** * 接口类 * @author Administrator * */ public interface Subject { /** * 购物 * @param name */ public void shoping(String name); /** * 睡觉 */ public void sleeping(); }
2.、要代理的实现类
package relation; public class SuperMan implements Subject{ @Override public void shoping(String name) { System.out.println(name + "在购物"); } @Override public void sleeping() { System.out.println("睡觉。。。"); } }
3、代理工厂
package relation; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //代理类 public class ProxyFactory implements InvocationHandler{ private Object target; //构造 public ProxyFactory(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理前。。。。。"); method.invoke(target, args); System.out.println("代理后。。。。。"); return null; } //给目标对象生成代理对象 public Object getProxyInstance(){ return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new ProxyFactory(target)); } }
三部搞定 下面就测试了
package relation; public class Test { public static void main(String[] args) { Subject s = new SuperMan(); //动态创建代理对象 Subject sub =(Subject) new ProxyFactory(s).getProxyInstance(); //实例 sub.shoping("xiaoxiao"); sub.sleeping(); } }
结果:
代理前。。。。。
xiaoxiao在购物
代理后。。。。。
代理前。。。。。
睡觉。。。
代理后。。。。。