• 技术文章 >Java >java教程

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

    高洛峰高洛峰2017-01-13 09:49:43原创524
    如下所示:

    ////////////////// 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反射机制动态加载类的简单实现的全部内容了,希望对大家有所帮助,多多支持PHP中文网~

    更多java 利用java反射机制动态加载类的简单实现相关文章请关注PHP中文网!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:举例讲解Java的内部类与类的加载器 下一篇:PagerSlidingTabStrip制作Android带标签的多界面滑动切换
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网