JAVA全系列 教程
3762个小节阅读:7091.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
JDK动态代理是基于接口来实现的,底层是基于Java 反射技术实现的。
创建接口
创建接口com.bjsxt.proxy.jdkproxy.House
因为JDK动态代理要求调用者必须实现接口。所以先建立接口
xxxxxxxxxx
public interface House {
void bigHouse();
}
创建真实对象类
创建类com.bjsxt.proxy.jdkproxy.Fangdong
xxxxxxxxxx
public class Fangdong implements House{
@Override
public void bigHouse() {
System.out.println("大房子");
}
}
创建代理类
创建com.bjsxt.proxy.jdkproxy.Zhongjie
xxxxxxxxxx
public class Zhongjie implements InvocationHandler {
private Object target;
public Zhongjie(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("带看");
Object result = method.invoke(target, args);
System.out.println("收取中介费");
return result;
}
}
创建客户类
创建com.bjsxt.proxy.jdkproxy.Kehu
xxxxxxxxxx
public class Kehu {
public static void main(String[] args) {
InvocationHandler handler = new Zhongjie(new Fangdong());
/*
newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
loader: 类加载器。让生成的代理对象立即生效
interfaces:接口数组对象。基于哪个接口生成代理对象。
h:负责调用真实对象的处理类,相当于代理类。
House house 里面存储的实际上是Fangdong访问的代理对象。这个代理对象实现了House接口
*/
House house = (House) Proxy.newProxyInstance(Fangdong.class.getClassLoader(),
new Class[]{House.class},handler);
house.bigHouse();
}
}