我想获得一个包中所有接口的列表,因此我不必手动更新新接口列表。所以我想是否有可能通过反射获取给定包中所有接口的列表。我知道可以在包中获取所有类,但我不知道如何使用接口来做到这一点。
问问题
2224 次
3 回答
2
于 2012-09-30T08:04:26.683 回答
1
您可以(尝试)列出包中的所有类。然后,您可以检查每个类以查看它是否是该Class#isInterface()
方法的接口。
于 2012-09-30T08:04:40.410 回答
1
我不知道“手动更新新接口列表”的确切含义,但是如果您只想获取特定包中包含的所有接口的列表并且使用spring,则可以执行以下操作:
// Instantiate new ClassPathScanner, usualy used to get classes annotated with @Service, @Component.
// The false paramater is provided to disable these default filters.
// Since the ClassPathScanningCandidateComponentProvider only scanns for toplevel classes we
// override the default isCandidateComponent Method to return Interfaces instead.
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false) {
@Override
protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
return beanDefinition.getMetadata().isInterface();
}
};
// Filter to include only classes that have a particular annotation.
// Since we disables the default filters we have to provide this one.
// Here we can provide any regex we want, in this case we fillter all provided classes / interfaces.
provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*")));
// define package to scan.
Set<BeanDefinition> beans = provider.findCandidateComponents("compu.global.hyper.mega.net");
beans.forEach(bd -> {
System.out.println(bd.getBeanClassName());
});
于 2018-07-26T13:01:14.027 回答