首页 > 编程 > Java > 正文

java 利用java反射机制动态加载类的简单实现

2019-11-26 13:48:30
字体:
来源:转载
供稿:网友

如下所示:

////////////////// Load.javapackage org.bromon.reflect;import java.util.ArrayList;import java.util.List;public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<String> result=new ArrayList<String>(); result.add(new String("加载成功")); return result; }}/////////////////// Operator.javapackage org.bromon.reflect;import java.util.*;public interface Operator { public List<?> act(List<?> params);}/////////////Store.javapackage org.bromon.reflect;import java.util.ArrayList;import java.util.List;public class Store implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<String> result=new ArrayList<String>(); result.add(new String("Store")); return result; }}///////////////Success.javapackage org.bromon.reflect;import java.util.List;import java.util.ArrayList;public class Success implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<String> result=new ArrayList<String>(); result.add(new String("操作成功")); return result; }}////////////////////////TestReflect.javapackage org.bromon.reflect;import java.io.FileInputStream;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Properties;import java.util.List;public class TestReflect { private String loadProtocal(String header) { String result = null; try {  Properties prop = new Properties();  FileInputStream fis = new FileInputStream("emp.properties");  prop.load(fis);  result = prop.getProperty(header);  fis.close(); } catch (Exception e) {  System.out.println(e); } return result; } // 针对消息作出响应,利用反射导入对应的类 public String response(String header, String content) { String result = null; String s = null; try {  /*  * 导入属性文件emp.properties,查询header所对应  *  * 的类的名字 通过反射机制动态加载匹配的类,所有的类都  *  * 被Operator接口隔离 可以通过修改属性文件、添加新的类(继  *  * 承MsgOperator接口)来扩展协议  */  s = "org.bromon.reflect." + this.loadProtocal(header);  // 加载类  Class<?> c = Class.forName(s);  // 创建类的事例  Operator mo = (Operator) c.newInstance();    // 构造参数列表  Class<?> params[] = new Class[1];  params[0] = Class.forName("java.util.List");    // 查询act方法  Method m = c.getMethod("act", params);  List<String> args = new ArrayList<String>();  args.add(content);    // 调用方法并且获得返回  Object returnObject = m.invoke(mo, args);  List<?> list=(List<?>)returnObject;  System.out.println(list.get(0)); } catch (Exception e) {  System.out.println("Handler-response:" + e); } return result; } public static void main(String args[]) { TestReflect tr = new TestReflect(); tr.response("2000", "消息内容"); }}

以上就是小编为大家带来的java 利用java反射机制动态加载类的简单实现的全部内容了,希望对大家有所帮助,多多支持武林网~

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表