代理模式
被代理得接口和实现类
public interface TestService { public void print(); }
public class TestServiceImpl implements TestService{ @Override public void print() { System.out.println("打印实现类信息"); } }
代理类
//顺便说下为什么要继承InvocationHandler接口呢? /*因为代理类的实例在调用实现类的方法的时候,不会调真正的实现类的这个方法, 而是转而调用这个类的invoke方法(继承时必须实现的方法), 在这个方法中你可以调用真正的实现类的这个方法。 */ public class ProxyHandler implements InvocationHandler { // 持有被代理对象的引用(此引用可以有外部灵活制定的) private Object target; public ProxyHandler(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; } }
main方法
public class TestMain { public static void main(String[] args) { TestService test = new TestServiceImpl(); //创建代理处理器 ProxyHandler proxyHandler = new ProxyHandler(test); //创建代理类 TestService testProxy = (TestService) Proxy.newProxyInstance(test.getClass().getClassLoader(), test.getClass().getInterfaces(), proxyHandler); testProxy.print(); } }
结果
代理类开始 打印实现类信息 代理类结束