栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础知识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础知识

一、Java反射+动态代理
//定义一个接口协议 
interface CalculatorProtocol{
	public int add(int a, int b);        //两个数相加 
	public int subtract(int a, int b);   //两个数相减 
}

//实现接口协议 
class Server implements CalculatorProtocol {
	public int add(int a, int b) {
		return a+b;
	}
	public int subtract(int a, int b) { 
		return a-b;
	}
}

//实现调用处理器接口
class CalculatorHandler implements InvocationHandler {
	private Object objOriginal;
	
	public CalculatorHandler(Object obj) {
		this.objOriginal=obj;
	}
	public Object invoke(Object proxy, Method method, Object[]args) throws Throwable {
	//可添加一些预处理
	Object result=method.invoke(this.objOriginal, args);
	//可添加一些后续处理
	return result;
	}
}

//测试用例
public class DynamicProxyExample {
	public static void main(String[]args) {
	// 创建Server
	CalculatorProtocol server=new Server();
	InvocationHandler handler=new CalculatorHandler(server);
	// 创建一个Client
	CalculatorProtocol client=(CalculatorProtocol)Proxy.newProxyInstance(server.getClass().getClassLoader(), server.getClass().getInterfaces(), handler); 
	int r=client.add(5,3);
	System.out.println("5+3="+r);
	r=client.subtract(10,2);
	System.out.println("10-2="+r);
	}
}

在上面这个例子,用户只需要实现InvocationHandler的invoke方法就可以完成对CalculatorProtocol动态代理类上的方法调用,具体调用时可以使用client这个对象代理了Server类,需要server执行的操作,都调用client来做,client会自己在内部再次调用Server类,client可能自己还会加入一些操作
用户在开发时时候并不知道server对象是哪个类,只知道这个它实现了CalculatorProtocol

为了实现这种代理,java语言需要提供一些机制:
❑Class类:代表一个Java类。
❑Field类:代表Java类的属性。
❑Method类:代表Java类的方法。
❑Constructor类:代表Java类的构造函数。 ❑Array类:提供了动态创建数组,以及访问数组元素的静态方法。
❑Proxy类以及InvocationHandler接口:提供了动态生成代理类以及实例的方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号