如何获取classpath下实现某接口的所有类?

黄勇 发布于 2013/08/31 01:31
阅读 2K+
收藏 0
已知:
1.接口名(例如:Service)
2.存在若干类均实现该接口

求解:

获取classpath下实现Service接口的所有类?(用Java代码实现)

备注:
是否存在某第三方类库可直接实现该功能?

加载中
0
王瑞平
王瑞平

linux下似乎可以用grep查找到

可以按照这个思路去做

黄勇
黄勇
请问如何用Java代码实现呢?
0
pseudo
pseudo
有一个方法就是把classpath下所有类都加载,然后用Service.class.isAssignableFrom(加载的类),返回true说明这个类实现了这个Service接口
pseudo
pseudo
回复 @黄勇 : 看楼下说的
黄勇
黄勇
意思就是通过这个方法获取classpath下所有的类,然后遍历这些类,判断其中每个类是否实现了该接口,如果实现了就将其add到一个list中,遍历完成后返回这个list。是这样吗?请问获取classpath下所有类的方法是哪个呢?
0
捏造的信仰
捏造的信仰

这需要扫描 classpath 下的所有路径,解析所有 jar 包。不过有一些现成的工具类了。参考这里:

http://stackoverflow.com/questions/5577543/java-class-finder-tool

http://www.google.com/#q=java+search+classpath

黄勇
黄勇
非常感谢你的回复!能否有一段Java代码来描述该需求应该如何实现呢?
0
王瑞平
王瑞平

java执行外部命令用exec command

具体的自己试着谢谢就会了


0
金贞花
金贞花
楼主大人 找到办法了吗
0
黄勇
黄勇

Apache Commons 下也有一个实现,不过目前还是 sandbox 阶段,并且长期都没更新了。

http://commons.apache.org/sandbox/commons-classscan/userguide.html

长途跋涉来到你身后
长途跋涉来到你身后
问一下哪里可以找到classcan的jar包 或者源码 我在svn上都没看到有
Catelyn
Catelyn
http://www.oschina.net/code/snippet_1160609_46174 见最后一个测试用例,在我项目里主要用来扫描实现mybatis实体类标记接口的所有实体类,为其注册类名为typealias
金贞花
金贞花
spring是怎么做到的
0
大王来巡山
大王来巡山

这里给大家说一下这个问题,其实这个问题在jdk中已经有了很好的解决方法,就是ServiceLoader类,这个类就可以实现这些功能,只需要在实现类上做少量的配置即可,但是针对百度出来的内容,不得不说,很多都是扫描所有classpath来实现,但是当一个项目中类比较多,这个扫描是存在巨大问题的,所以建议使用ServiceLoader来做

返回顶部
顶部