`
qq1988627
  • 浏览: 107375 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

搜索类

    博客分类:
  • Java
 
阅读更多
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

    "ip物理定位搜索类 配合结合纯真数据库qqwry.dat"是针对这一需求的一种解决方案,它结合了特定的数据库文件——qqwry.dat,以实现高效的IP查询和定位功能。以下是对这一主题的详细阐述。 首先,我们需要了解IP地址...

    vb 快速文件搜索类

    在VB(Visual Basic)编程环境中,快速文件搜索类是一个实用工具,它可以帮助开发者高效地定位和查找特定的文件。这个类通常包含了一系列属性和方法,用于定制搜索条件和执行搜索操作。下面我们将深入探讨这个主题,...

    C#文件搜索类源码

    这个"文件搜索类源码"是为了解决这一问题而设计的,它是一个在Visual Studio 2010环境下开发的库,封装了文件搜索的逻辑,使得开发者可以更便捷地在程序中实现文件查找功能。 首先,让我们深入理解这个类的核心功能...

    google search close 谷歌搜索类

    总的来说,通过"google search close 谷歌搜索类",开发者可以方便地将Google的强大搜索能力整合到自己的应用程序或网站中,提供定制化的搜索体验。"GoogleCustomSearch.php"和"examples.php"提供了实现这一功能的...

    vba拼音搜索类-支持拼音简写,全拼,汉字搜索

    本知识点主要介绍一个VBA类模块,它专门设计用于实现拼音搜索功能,支持拼音简写、全拼以及汉字搜索。这种功能在处理大量中文数据时非常有用,能够帮助用户快速定位和检索信息。 类(Class)是面向对象编程的基础,...

    小地图搜索类, 加入不需要最终地图点, 和地图移动结束回调函数

    在IT行业中,小地图搜索类通常用于游戏开发或者地理信息系统(GIS)应用中,它提供了一种便捷的方式来查看和导航大型地图数据。标题提到的"小地图搜索类"可能是一个自定义的ActionScript组件,允许开发者在不需指定...

    文件搜索类扩展,扩展CFileFind功能

    标题“文件搜索类扩展,扩展CFileFind功能”提示我们,这个项目旨在增强CFileFind的功能,特别是引入了对正则表达式的支持。这使得开发者能够更灵活地定义文件名的匹配规则,比如查找所有以".txt"结尾的文件,或者...

    VB源码 快速文件搜索类,并附有VB应用示例

    在VB(Visual Basic)编程环境中,快速文件搜索类是一个重要的工具,它可以帮助开发者高效地查找和定位特定的文件。这个类通常包含了一系列方法和属性,用于实现文件系统的遍历、匹配条件设定以及搜索结果的返回。...

    传说中比google与百度牛的十佳搜索类网站.doc

    【标题】:“传说中比google与百度牛的十佳搜索类网站” 【描述】:文档列举了十个据说比Google和百度更出色的搜索类网站,涵盖了知识、问答、音乐、软件下载、旅游、杂志、怀旧等多个领域。 【标签】:“互联网”...

    Javaweb搜索类小项目,带mysql数据库

    在这个搜索类小项目中,开发者可能创建了一个或多个JDBC连接,用于插入、查询、更新或删除数据库中的搜索记录。 MySQL是一种广泛使用的开源关系型数据库管理系统,适合于中小型Web应用程序。在这个项目中,数据库...

    Java目录搜索类工具

    Java实现文件搜索工具类,支持通配符查询功能并返回所得到的File对象

    比google和百度强十倍的搜索类网站

    比google和百度强十倍的搜索类网站 比google和百度强十倍的搜索类网站(一定要收藏,肯定会有用的)

    ftp资源信息搜索类(php)

    用php语言做的ftp资源遍历搜索类,可以把ftp服务器上的资源整个遍历,然后把文件的信息写入到数据库以便于做搜索

    php 类似图片搜索类,Imghash

    需要注意的是,虽然Imghash类能提供高效的相似图搜索,但它并不完美。对于大幅度缩放、裁剪、旋转或添加噪声的图片,其识别效果可能会下降。因此,在实际应用中,可能需要结合其他图像处理技术来提高准确率。 在...

    php实现搜索类封装示例

    1. 搜索类的封装:在项目中为了代码的可复用和维护,将搜索相关的功能封装在一个类中是一个常见且实用的实践。文中给出了一个名为SoClass的PHP类,它包含了对搜索功能的封装,以及对搜索结果的处理。 2. 类属性的...

    微信小程序 小工具类 搜索框 (源代码+截图)

    微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源代码+截图)微信小程序 小工具类 搜索框 (源...

    贺兰_文件搜索类 Ver 1.0.3

    搜索指定目录下的指定文件,封装为类,并附使用示例。 图片框进度条显示百分比。 ' 方法:StartScan 开始搜索(用API函数遍历指定路径的文件) ' 参数说明: ' Path 要搜索的目录 ' SubFolders 是否搜索子目录 ' ...

    import及Java类的搜索路径.docx

    ### Import语句与Java类的搜索路径 #### 一、Import语句的作用 在Java编程中,`import`语句用于引入外部包中的类或接口,使得开发人员能够在当前类中使用这些类或接口,无需指定完整的包名。这极大地提高了代码的...

    图片搜索图片,基于php实现的图片相似搜索类,优化了感知算法(hash)不准确的问题

    虽然均值哈希更简单且更快速,但是在比较上更死板、僵硬。它可能产生错误的漏洞,如果有一个伽马校正或颜色直方图被用于到图像。这是因为颜色沿着一个非线性标尺 - 改变其中“平均值”的位置,并因此改变哪些高于/...

    快速文件搜索类,并附有VB应用示例

    内容索引:VB源码,文件操作,引以为荣搜索  填入文件名,将会从A盘开始搜查并继续,直到搜查到文件为止,搜索全部驱动器过程中,可以在任意时间单击 “停止”按钮结束搜索。可以使用通配符 * 与 ?搜查文件,如*.exe...

Global site tag (gtag.js) - Google Analytics