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 }
原文地址:https://www.cnblogs.com/suhfj-825/p/9333822.html