【发布时间】:2018-02-15 18:08:58
【问题描述】:
我正在编写一个 API,它提供基于类注释的功能。 API 将被导入,因此它不知道客户端的包。所以问题是:如何在不知道包名的情况下扫描类?
我找到了这些方法:
Package.getPackages()
但它只返回包的一个子集。
ClassPathScanningCandidateComponentProvider.findCandidateComponents(basePackageName)
但不接受通配符,例如* 或.。
编辑回复@Rakesh
@Component
public class Application {
@Autowired
public ApplicationContext appContext;
public static void main(String[] args) {
Application a = new Application();
String[] beanNames=a.appContext.getBeanNamesForAnnotation(Run.class);
for (String beanName : beanNames) {
System.out.println(beanName);
Object bean = a.appContext.getBean(beanName);
Class<? extends Object> class1 = bean.getClass();
System.out.println(class1);
}
}
}
【问题讨论】:
-
您不能将 bean 直接注入静态字段。所以去掉静电。
-
已修改,appContext 上仍为空指针。
-
如果您使用的是spring-boot,请参考以下链接,该链接演示了如何设置spring应用程序。 projects.spring.io/spring-boot 。应用程序类由您实例化,而不是由 spring 实例化。希望你能理解。
-
我没有使用 Spring-Boot,这是缺少一点...如果我没记错 Spring-Boot 启动服务器,我不确定制作一个 api 是否可行启动服务器...
标签: java spring reflection packages classloading