Java类自动扫描功能的实现
2015-08-29 13:22
627 查看
我们在使用Spring时可以指定一个名包,Spring可以自动扫描出该包下的所有组件。通过翻阅Spring源码,其实这个功能不难实现。
首先,所有在classpath下的资源(文件),都是可以被
这个方法返回一个
则有以下输出结果:
这是
由此, 我们可以得出扫描功能的思路:
1. 调用
2. 遍历所有
3. 如果是文件,则通过文件I/O操作遍历该目录下所有
4. 如果是Jar包,则通过Jar包I/O操作遍历该Jar包,提取出包中所有
根据以上思路,我们可以写一个
输出:
完整的实现在github:https://github.com/wanghongfei/pkg-scanner
首先,所有在classpath下的资源(文件),都是可以被
ClassLoader加载的。我们可以调用它的
getResources()方法加载类路径下的文件:
public Enumeration<URL> getResources(String name) throws IOException
这个方法返回一个
Enumeration对象,以
URL对象的形式保存了路径
name下的所有资源。 如果我们传递一个包路径
cn/fh, :
ClassLoader cl = Thread.currentThread().getContextClassLoader(); Enumeration<URL> urls = cl.getResources("cn/fh"); while (urls.hasMoreElements()) { URL u = urls.nextElement(); System.out.println(u); System.out.println(u.getProtocol()); System.out.println(u.getPath()); }
则有以下输出结果:
file:/Users/whf/projects/exam/out/production/exam/cn/fh/ file /Users/whf/projects/exam/out/production/exam/cn/fh/
这是
cn/fh不在JAR包中的结果。如果是在JAR包中,则输出以下信息:
jar:file:/Users/whf/.m2/repository/cn/fh/web-security/2.1.1.RELEASE/web-security-2.1.1.RELEASE.jar!/cn/fh/ jar file:/Users/whf/.m2/repository/cn/fh/web-security/2.1.1.RELEASE/web-security-2.1.1.RELEASE.jar!/cn/fh/
由此, 我们可以得出扫描功能的思路:
1. 调用
ClassLoader#getResources()方法,得到返回的
URL集合
2. 遍历所有
URL对象。
3. 如果是文件,则通过文件I/O操作遍历该目录下所有
*.class文件,提取出类名。
4. 如果是Jar包,则通过Jar包I/O操作遍历该Jar包,提取出包中所有
*.class文件。
根据以上思路,我们可以写一个
PkgScanner类,并提供以下使用方法:
PkgScanner scanner = new PkgScanner("cn.fh.pkgscanner"); List<String> list = scanner.scan(); list.forEach( f -> System.out.println(f));
输出:
cn.fh.pkgscanner.PathUtils cn.fh.pkgscanner.PkgScanner cn.fh.pkgscanner.ResourceType
完整的实现在github:https://github.com/wanghongfei/pkg-scanner
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统