Spring-引导:创建自定义注释的实例类

Spring-Boot: Create instances of custom annoated classes

对于一个项目,我试图收集特定自定义注释的所有 classes 并创建它的实例。或者使用 Spring-在其上下文中创建的引导实例。

这是自定义注释:

public @interface MyAnnotation {
   String name();
}

以下是 class在各种包中使用此注释的代码:

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 在我的服务中 class: MyAnnotationService.java:

@Service
@Singleton
class MyAnnotationService {
   
     public MyAnnotationService() {
         List<String> classNamesToLoad = SpringSomething.findWithAnnotation(MyAnnotation.class);
         
         for (String cls : classNamesToLoad) {
           createNewInstance(cls);
         }
 
     }
}

Option#2 在我的服务中 class: MyAnnotationService.java:

@Service
@Singleton
class MyAnnotationService {
   
     public MyAnnotationService() {
         Map<String, Object> objectsCreatedBySpring = SpringSomething.findWithAnnotation(MyAnnotation.class);
     }
}

我不确定要在哪里寻找什么来实现这一点。或者如果可能的话。

有一个解决方案。

添加 @Component annotation so your classes are managed by Spring. Then from the ApplicationContext, you can get all the beans and even specific beans from an annotation with getBeansWithAnnotation.

示例

Map<String,Object> beans = applicationContext.getBeansWithAnnotation(Foo.class);