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;
}
}
分享到:
相关推荐
"ip物理定位搜索类 配合结合纯真数据库qqwry.dat"是针对这一需求的一种解决方案,它结合了特定的数据库文件——qqwry.dat,以实现高效的IP查询和定位功能。以下是对这一主题的详细阐述。 首先,我们需要了解IP地址...
在VB(Visual Basic)编程环境中,快速文件搜索类是一个实用工具,它可以帮助开发者高效地定位和查找特定的文件。这个类通常包含了一系列属性和方法,用于定制搜索条件和执行搜索操作。下面我们将深入探讨这个主题,...
这个"文件搜索类源码"是为了解决这一问题而设计的,它是一个在Visual Studio 2010环境下开发的库,封装了文件搜索的逻辑,使得开发者可以更便捷地在程序中实现文件查找功能。 首先,让我们深入理解这个类的核心功能...
总的来说,通过"google search close 谷歌搜索类",开发者可以方便地将Google的强大搜索能力整合到自己的应用程序或网站中,提供定制化的搜索体验。"GoogleCustomSearch.php"和"examples.php"提供了实现这一功能的...
本知识点主要介绍一个VBA类模块,它专门设计用于实现拼音搜索功能,支持拼音简写、全拼以及汉字搜索。这种功能在处理大量中文数据时非常有用,能够帮助用户快速定位和检索信息。 类(Class)是面向对象编程的基础,...
在IT行业中,小地图搜索类通常用于游戏开发或者地理信息系统(GIS)应用中,它提供了一种便捷的方式来查看和导航大型地图数据。标题提到的"小地图搜索类"可能是一个自定义的ActionScript组件,允许开发者在不需指定...
标题“文件搜索类扩展,扩展CFileFind功能”提示我们,这个项目旨在增强CFileFind的功能,特别是引入了对正则表达式的支持。这使得开发者能够更灵活地定义文件名的匹配规则,比如查找所有以".txt"结尾的文件,或者...
在VB(Visual Basic)编程环境中,快速文件搜索类是一个重要的工具,它可以帮助开发者高效地查找和定位特定的文件。这个类通常包含了一系列方法和属性,用于实现文件系统的遍历、匹配条件设定以及搜索结果的返回。...
【标题】:“传说中比google与百度牛的十佳搜索类网站” 【描述】:文档列举了十个据说比Google和百度更出色的搜索类网站,涵盖了知识、问答、音乐、软件下载、旅游、杂志、怀旧等多个领域。 【标签】:“互联网”...
在这个搜索类小项目中,开发者可能创建了一个或多个JDBC连接,用于插入、查询、更新或删除数据库中的搜索记录。 MySQL是一种广泛使用的开源关系型数据库管理系统,适合于中小型Web应用程序。在这个项目中,数据库...
Java实现文件搜索工具类,支持通配符查询功能并返回所得到的File对象
比google和百度强十倍的搜索类网站 比google和百度强十倍的搜索类网站(一定要收藏,肯定会有用的)
用php语言做的ftp资源遍历搜索类,可以把ftp服务器上的资源整个遍历,然后把文件的信息写入到数据库以便于做搜索
需要注意的是,虽然Imghash类能提供高效的相似图搜索,但它并不完美。对于大幅度缩放、裁剪、旋转或添加噪声的图片,其识别效果可能会下降。因此,在实际应用中,可能需要结合其他图像处理技术来提高准确率。 在...
1. 搜索类的封装:在项目中为了代码的可复用和维护,将搜索相关的功能封装在一个类中是一个常见且实用的实践。文中给出了一个名为SoClass的PHP类,它包含了对搜索功能的封装,以及对搜索结果的处理。 2. 类属性的...
微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源...
搜索指定目录下的指定文件,封装为类,并附使用示例。 图片框进度条显示百分比。 ' 方法:StartScan 开始搜索(用API函数遍历指定路径的文件) ' 参数说明: ' Path 要搜索的目录 ' SubFolders 是否搜索子目录 ' ...
### Import语句与Java类的搜索路径 #### 一、Import语句的作用 在Java编程中,`import`语句用于引入外部包中的类或接口,使得开发人员能够在当前类中使用这些类或接口,无需指定完整的包名。这极大地提高了代码的...
虽然均值哈希更简单且更快速,但是在比较上更死板、僵硬。它可能产生错误的漏洞,如果有一个伽马校正或颜色直方图被用于到图像。这是因为颜色沿着一个非线性标尺 - 改变其中“平均值”的位置,并因此改变哪些高于/...
内容索引:VB源码,文件操作,引以为荣搜索 填入文件名,将会从A盘开始搜查并继续,直到搜查到文件为止,搜索全部驱动器过程中,可以在任意时间单击 “停止”按钮结束搜索。可以使用通配符 * 与 ?搜查文件,如*.exe...