java 利用java反射机制动态加载类的简单实现
如下所示:
//////////////////Load.java
packageorg.bromon.reflect;
importjava.util.ArrayList;
importjava.util.List;
publicclassLoadimplementsOperator{
@Override
publicList<?>act(List<?>params){
//TODOAuto-generatedmethodstub
List<String>result=newArrayList<String>();
result.add(newString("加载成功"));
returnresult;
}
}
///////////////////Operator.java
packageorg.bromon.reflect;
importjava.util.*;
publicinterfaceOperator{
publicList<?>act(List<?>params);
}
/////////////Store.java
packageorg.bromon.reflect;
importjava.util.ArrayList;
importjava.util.List;
publicclassStoreimplementsOperator{
@Override
publicList<?>act(List<?>params){
//TODOAuto-generatedmethodstub
List<String>result=newArrayList<String>();
result.add(newString("Store"));
returnresult;
}
}
///////////////Success.java
packageorg.bromon.reflect;
importjava.util.List;
importjava.util.ArrayList;
publicclassSuccessimplementsOperator{
@Override
publicList<?>act(List<?>params){
//TODOAuto-generatedmethodstub
List<String>result=newArrayList<String>();
result.add(newString("操作成功"));
returnresult;
}
}
////////////////////////TestReflect.java
packageorg.bromon.reflect;
importjava.io.FileInputStream;
importjava.lang.reflect.Method;
importjava.util.ArrayList;
importjava.util.Properties;
importjava.util.List;
publicclassTestReflect{
privateStringloadProtocal(Stringheader){
Stringresult=null;
try{
Propertiesprop=newProperties();
FileInputStreamfis=newFileInputStream("emp.properties");
prop.load(fis);
result=prop.getProperty(header);
fis.close();
}catch(Exceptione){
System.out.println(e);
}
returnresult;
}
//针对消息作出响应,利用反射导入对应的类
publicStringresponse(Stringheader,Stringcontent){
Stringresult=null;
Strings=null;
try{
/*
*导入属性文件emp.properties,查询header所对应
*
*的类的名字通过反射机制动态加载匹配的类,所有的类都
*
*被Operator接口隔离可以通过修改属性文件、添加新的类(继
*
*承MsgOperator接口)来扩展协议
*/
s="org.bromon.reflect."+this.loadProtocal(header);
//加载类
Class<?>c=Class.forName(s);
//创建类的事例
Operatormo=(Operator)c.newInstance();
//构造参数列表
Class<?>params[]=newClass[1];
params[0]=Class.forName("java.util.List");
//查询act方法
Methodm=c.getMethod("act",params);
List<String>args=newArrayList<String>();
args.add(content);
//调用方法并且获得返回
ObjectreturnObject=m.invoke(mo,args);
List<?>list=(List<?>)returnObject;
System.out.println(list.get(0));
}catch(Exceptione){
System.out.println("Handler-response:"+e);
}
returnresult;
}
publicstaticvoidmain(Stringargs[]){
TestReflecttr=newTestReflect();
tr.response("2000","消息内容");
}
}
以上就是小编为大家带来的java利用java反射机制动态加载类的简单实现的全部内容了,希望对大家有所帮助,多多支持毛票票~