zoukankan      html  css  js  c++  java
  • Java反射案例

      1 package weaver.interfaces.workflow.action;
      2 
      3 import java.io.File;
      4 import java.io.IOException;
      5 import java.lang.reflect.Method;
      6 import java.util.ArrayList;
      7 import java.util.List;
      8 
      9 import org.apache.commons.logging.Log;
     10 import org.apache.commons.logging.LogFactory;
     11 
     12 import weaver.conn.RecordSet;
     13 import weaver.interfaces.schedule.BaseCronJob;
     14 
     15 /**
     16  * 定时任务:执行多个计划任务,凡是要修改requestid的都要放到这里执行
     17  * @author Administrator
     18  *
     19  */
     20 public class TimerTask extends BaseCronJob{
     21     
     22     // 定时任务固定变量声明
     23     private String requestid;
     24     private String mainid;
     25     private String sqr;
     26     private String sqbm;
     27     private Log log;
     28     private static final String ClassName = "TimerTask";
     29 
     30     public TimerTask() {
     31         log = LogFactory.getLog(TimerTask.class.getName());
     32     }
     33 
     34     RecordSet recordSet = new RecordSet();
     35     
     36     /*
     37      * 定时执行的任务,业务逻辑
     38      */
     39     public void execute(){
     40     /*    log.info("==========开始定时任务=============");
     41         new NoticeOfDelivery().doTask();
     42         new Warehousing().doTask();
     43         log.info("==========结束定时任务=============");*/
     44         
     45         log.info("=======================开始定时任务========================");
     46         List<Class> classList = new ArrayList<Class>();//实现对应接口类的集合
     47         log.info("====================TimerTask:1===========================");
     48         //path = d:/weaver/ecology/classbean/weaver/interfaces/workflow/action
     49         //String path = TimerTask.class.getResource("").toString().substring(6);//TimerTask类目录
     50         String path = "d:/weaver/ecology/classbean/weaver/interfaces/workflow/action";
     51         log.info("path = " + path);
     52         try{
     53             List<String> fileList = find(path);//先获得path下所有的.class文件
     54             log.info("====================TimerTask:2===========================");
     55             String packageName = TimerTask.class.getPackage().getName();
     56             log.info("packageName = " + packageName);
     57             //获得所有的实现接口BaseTimerTask的类,加到classList
     58             for (String className : fileList) {
     59                 if ("AccountUserAction".equals(className) || "AccountUserActionT".equals(className) || "BaseTimerTask".equals(className)) {
     60                     continue;
     61                 }
     62                 Class<Object> classObj = (Class<Object>) Class.forName(packageName+ "." +className);
     63                 if (BaseTimerTask.class.isAssignableFrom(classObj)) {//实现了doTask接口
     64                     classList.add(classObj);
     65                 }
     66             }
     67             log.info("====================TimerTask:3===========================");
     68             //调用符合条件的接口方法
     69             for (Class Obj : classList) {
     70                 Method method = Obj.getMethod("doTask");
     71                 method.invoke(Obj.newInstance());
     72             }
     73             log.info("=======================结束定时任务========================");
     74         }catch (Exception e) {
     75             e.printStackTrace();
     76         }
     77         
     78     }
     79     
     80     
     81     /*
     82      * 得到一个目录下所有的文件
     83      */
     84     public static List<String> find(String path) throws IOException{
     85 
     86         List<String> list = new ArrayList<String>();
     87         //获取pathName的File对象
     88         File dirFile = new File(path);
     89         //判断该文件或目录是否存在,不存在时在控制台输出提醒
     90         if (!dirFile.exists()) {
     91             return null;
     92         }
     93         //获取此目录下的所有文件名与目录名
     94         String[] fileList = dirFile.list();
     95         for (int i = 0; i < fileList.length; i++) {
     96             //遍历文件目录
     97             String string = fileList[i];
     98             //File("documentName","fileName")是File的另一个构造器
     99             File file = new File(string);
    100             if (file.getName().endsWith(".class")) {
    101                 list.add(file.getName().substring(0, file.getName().indexOf(".")));
    102             }
    103         }
    104         return list;
    105     }
    106 }
  • 相关阅读:
    shader之渐变长方体实现(threejs)
    shader之threejs应用
    shader之cesium应用
    pip install -- Failed building wheel for XXX
    pycharm -- 界面乱码
    Android Studio -- 优化速度
    django -- ImageField 上传图片修改头像
    AI -- 回溯法解决四皇后问题
    Android Studio -- 真机测试
    傻瓜函数式编程
  • 原文地址:https://www.cnblogs.com/suhfj-825/p/9333822.html
Copyright © 2011-2022 走看看