动态代理|JDK动态代理简单学习

首先定义一个接口

package cn.wm;


public interface Subject { public void rent(); public void hello(String str); }实现类
package cn.wm; public class RealSubject implementsSubject { @Override public void rent() { System.out.println("I want to rent my house"); }@Override public void hello(String str) { System.out.println("hello:"+str); } }

代理类(需要实现InvocationHandler接口)
package cn.wm; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler { private Object subject; public DynamicProxy(Object subject) { this.subject = subject; }@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before rent house"); System.out.println("method" + method); method.invoke(subject,args); System.out.println("after rent house"); return null; } }

【动态代理|JDK动态代理简单学习】测试类
package cn.wm; import java.lang.reflect.Proxy; public class Client { public static void main(String[] args) { RealSubject realsubject = new RealSubject(); DynamicProxy dynamicProxy = new DynamicProxy(realsubject); Subject subject = (Subject) Proxy.newProxyInstance(dynamicProxy.getClass().getClassLoader(), realsubject.getClass().getInterfaces(), dynamicProxy); System.out.println(subject.getClass().getName()); subject.rent(); subject.hello("Hello Word"); } }

打印结果
com.sun.proxy.$Proxy0//说明为代理对象 before rent house methodpublic abstract void cn.wm.Subject.rent()//调用的为接口的方法 I want to rent my house after rent house before rent house methodpublic abstract void cn.wm.Subject.hello(java.lang.String)//调用的为接口的方法 hello:Hello Word after rent house


参考 点击打开链接

    推荐阅读