java - 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 管理。然后,您可以使用getBeansWithAnnotationApplicationContext
从注释中获取所有 bean 甚至特定的 bean 。
例子
Map<String,Object> beans = applicationContext.getBeansWithAnnotation(Foo.class);
推荐阅读
- rust - 如何定义一个接受任何实现默认特征的参数的函数
- c# - C# 中的 Oracle 查询未在日期上找到匹配项
- swift - 是否有与 Firestore 中可用的增量方法等效的 Firebase 实时数据库?
- javascript - 如何在 javascript 或 Angular 中添加两个持续时间
- java - 从另一个活动的后台堆栈中删除一个活动?
- jquery - 视频的 FancyBox 缩略图
- algorithm - 给定中序遍历重构一棵完整的树
- php - 将度分和十分之一秒转换为十进制
- output - 扩展 xtscc 命令输出中的小数位数
- python - 用列表 Pyspark Dataframe 中的值替换 NA