首先定义一个接口
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
参考 点击打开链接
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)