/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; public interface Service { public void offerService(); }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; public class PrintService implements Service { @Override public void offerService() { System.out.println("Printing now!"); } }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; public class ScanService implements Service { @Override public void offerService() { System.out.println("Scaning now!"); } }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; public class StaticProxy implements Service { Service service; public StaticProxy(Service service) { this.service = service; } public void setServiceProxy(Service service) { this.service = service; } @Override public void offerService() { this.beforeCall(); this.service.offerService(); this.afterCall(); } public void beforeCall() { System.out.println("--BeforeCall--"); } public void afterCall() { System.out.println("--AfterCall--"); } }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; public class StaticClient { public static void main(String[] args) { Service servicePrint = new PrintService(); Service scanPrint = new ScanService(); StaticProxy serviceProxy = new StaticProxy(servicePrint); serviceProxy.offerService(); serviceProxy.setServiceProxy(scanPrint); serviceProxy.offerService(); } }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler { private Object object; public DynamicProxy (Object object) { super(); this.object = object; } @Override public Object invoke(Object obj, Method method, Object[] args) throws Throwable { this.beforeCall(); method.invoke(object, args); this.afterCall(); return null; } public void beforeCall() { System.out.println("--BeforeCall--"); } public void afterCall() { System.out.println("--AfterCall--"); } }
/* * @author junin * @date 2102-11-21 * @email [email protected] */ package Proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class DynamicClient { public static void main(String[] args) { DynamicProxy dynamicProxy = new DynamicProxy(new PrintService()); Service service = (Service)Proxy.newProxyInstance(Service.class.getClassLoader(), new Class[]{Service.class}, dynamicProxy); service.offerService(); dynamicProxy = new DynamicProxy(new ScanService()); service = (Service)Proxy.newProxyInstance(Service.class.getClassLoader(), new Class[]{Service.class}, dynamicProxy); service.offerService(); } }