對于一個專案,我正在嘗試收集特定自定義注釋的所有類并創建它的實體。或者使用在其背景關系中創建的 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);
}
}
我不確定在何處尋找什么來實作這一目標。或者,如果它甚至可能。
uj5u.com熱心網友回復:
有一個解決方案。
添加@Component注釋,以便您的類由 Spring 管理。然后從ApplicationContext,您可以使用getBeansWithAnnotation從注釋中獲取所有 bean 甚至特定 bean 。
例子
Map<String,Object> beans = applicationContext.getBeansWithAnnotation(Foo.class);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/331713.html
