这里有新鲜出炉的Java设计模式,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇java 利用java反射机制动态加载类的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
如下所示:
- ////////////////// 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", "消息内容");
- }
- }
以上就是小编为大家带来的java 利用java反射机制动态加载类的简单实现的全部内容了,希望对大家有所帮助,多多支持PHPERZ~
来源: http://www.phperz.com/article/17/1116/359907.html