1.java jdk 代理 核心
jdk 代理基于 :
InvocationHandler (接口)
Proxy (代理类)
被代理类必须有抽象接口(父级)
2.代码如下
public interface Subject { void hello(String param); }
public class SubjectImpl implements Subject { @Override public void hello(String param) { System.out.println("hello "+ param); } }
public class SubjectProxy implements InvocationHandler{ private Subject subject; public SubjectProxy(Subject subject) { this.subject = subject; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("------------------begin---------------"); Object invoke =method.invoke(subject,args); System.out.println("--------------------end-----------------"); return invoke; } }
public class ProxyTest { public static void main(String[] args) { Subject subject = new SubjectImpl(); SubjectProxy subjectProxy = new SubjectProxy(subject); // Subject subject1 = (Subject) Proxy.newProxyInstance(subjectProxy.getClass().getClassLoader(),subject.getClass().getInterfaces(),subjectProxy); // 启动器|被代理类接口|被代理类 // subject1.hello("test"); Subject subject2 = (Subject) Proxy.newProxyInstance(subjectProxy.getClass().getClassLoader(),subject.getClass().getInterfaces(),subjectProxy); subject2.hello("test2"); } }