首页 > 解决方案 > Spring-Boot:创建自定义注释类的实例

问题描述

对于一个项目,我正在尝试收集特定自定义注释的所有类并创建它的实例。或者使用在其上下文中创建的 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);
     }
}

我不确定在哪里以及寻找什么来实现这一目标。或者,如果它甚至可能。

标签: javaspringspring-bootannotationsjava-11

解决方案


有一个解决方案。

添加@Component注释,以便您的类由 Spring 管理。然后,您可以使用getBeansWithAnnotationApplicationContext从注释中获取所有 bean 甚至特定的 bean 。

例子

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

推荐阅读