【发布时间】:2021-12-09 00:53:07
【问题描述】:
对于一个项目,我正在尝试收集特定自定义注释的所有类并创建它的实例。或者使用在其上下文中创建的 Spring-Boot 实例。
这里是自定义注解:
public @interface MyAnnotation {
String name();
}
以下是在各种包中使用此注解的类:
在com.my.project.package1
@MyAnnotation(name = "package_1_impl")
public class Package1Impl {}
在com.my.project.package2
@MyAnnotation(name = "package_2_impl")
public class Package2mpl {}
现在,我想收集所有这些实现实例并将它们用于策略模式。
所以,我想做如下的事情。以下只是我假设存在这样的事情。
Option#1 在我的服务类中:MyAnnotationService.java:
@Service
@Singleton
class MyAnnotationService {
public MyAnnotationService() {
List<String> classNamesToLoad = SpringSomething.findWithAnnotation(MyAnnotation.class);
for (String cls : classNamesToLoad) {
createNewInstance(cls);
}
}
}
Option#2 在我的服务类中:MyAnnotationService.java:
@Service
@Singleton
class MyAnnotationService {
public MyAnnotationService() {
Map<String, Object> objectsCreatedBySpring = SpringSomething.findWithAnnotation(MyAnnotation.class);
}
}
我不确定要在哪里以及寻找什么来实现这一目标。或者,如果有可能的话。
【问题讨论】:
-
这是否意味着我需要用
@Bean注释Package1Impl和Package2Impl?但是 Bean 是应用在方法上的,对吧? -
它们已经被 Spring 管理了,对吧?我的意思是他们有
@Componenet的注释或只是您的自定义注释? -
目前只是自定义的。
-
添加
@Component注释,以便它们由 Spring 管理。然后从ApplicationContext你可以得到所有的bean,甚至是来自注解的特定bean。试试吧,我会为你的问题写一个答案。
标签: java spring spring-boot annotations java-11