java 利用java反射機制動態加載類

ecy2 12年前發布 | 4K 次閱讀 可視化工具 C語言
//////////////////  Load.java

package 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.java

package org.bromon.reflect;
import java.util.*;

public interface Operator {
 public List<?> act(List<?> params);
}





/////////////Store.java

package 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.java

package 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.java

package 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", "消息內容");
 }
}
 本文由用戶 ecy2 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!