首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

搜寻类

2012-07-26 
搜索类package com.byd.mes.utilimport java.io.Fileimport java.lang.reflect.InvocationTargetExcepti

搜索类

package com.byd.mes.util;import java.io.File;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class ClassDiscovery {private static  final Log log = LogFactory.getLog(ClassDiscovery.class);public static List findByPackageNames(String webUrl,String interfaceName,String[] packageNames){final List clazzList=new ArrayList();if( packageNames == null) return null;  for (String string : packageNames) {String url= StringUtils.getStr(string).replace(".", "\");File[] files=new File(StringUtils.getStr(webUrl,"WEB-INF\\classes\",url)).listFiles();for (File file : files) {String clasName=file.getName().replace(".class","");try {String packageName=StringUtils.getStr(string,".",clasName);//排除类部类,以及除接口/抽象类的java文件。if(!StringUtils.contains(packageName, '$') && isFunction(packageName, interfaceName)){Class class1=Class.forName(packageName).getClass();Object object=Class.forName(packageName).newInstance();clazzList.add(object);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} }}return clazzList;}private static String getInvokeResult(Object object, Method[] method, int i)throws IllegalAccessException, InvocationTargetException {String result=(String)method[i].invoke(object);return result;}public static List findByDefaultPackageNames(String webUrl,String interfaceName){String key = "mes.dev["+interfaceName+"]";log.debug("mes dev key>>>"+key);String packageNamesStr = BeanFactory.getSystemParamters().get(key);log.debug("mes dev >>>"+packageNamesStr);String[] packageNames =packageNamesStr != null ? packageNamesStr.split(",") : new String[0];return findByPackageNames(webUrl,interfaceName,packageNames);}/** * @param packageName * @param interfaceName * @return * @throws ClassNotFoundException */private static boolean isFunction(String packageName,String interfaceName) throws ClassNotFoundException{Class c = Class.forName(packageName).getClass();if(c==null){log.debug("this class is null  >>>>>>  "+c);return false;}if(c.isInterface()){log.debug("this class is interface  >>>>>>" + c);return false;}if(Modifier.isAbstract(c.getModifiers())){log.debug("this class is abstract  >>>>>>  "+c);return false;}Class<?>[] interfaces=c.getInterfaces();if(interfaces == null || interfaces.length == 0){log.debug("this interfaces is null or length be 0  >>>>>>> "+interfaces);return false;}try {Class class1 = Class.forName(interfaceName).getClass();if(class1.isAssignableFrom(c)){return true;}} catch (ClassNotFoundException e) {e.printStackTrace();}return false;}}

?

热点排行