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);
}
}

我不确定在哪里以及用什么来实现这一目标。或者如果可能的话。

有一个解决方案。

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

示例

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

最新更新