java - 为候选人挑选弹簧多个级别
问题描述
我有一个可以通过多种方式初始化的 bean,例如:
- 如果一个 bean 配置没有任何
@Named
//@Qualifier
/@Profile
等注释,选择那个 - 否则,如果有一个带有 的 bean
@Profile
,则选择那个 - 否则,有一个使用初始化的默认 bean
@Value("property")
即像这样的例子:
class SpringConfig {
// Priority 1
@Bean
User user() { ... }
// Priority 2
@Bean
@Profile("profile1")
User user() { ... }
// Priority 3
@Bean
User user(@Value("user") { ... }
}
使用上述配置,应该选择具有“优先级 1”的用户。注释掉该 bean,如果启用了“profile1”,则应该选择具有“优先级 2”的用户。否则(“profile1”未激活或该 bean 被注释掉),它应该使用“user”环境变量以“优先级 3”初始化用户。
我认为@Primary
不会在这里工作,因为有两个以上的候选人。
可能有更多或不同种类的级别或逻辑来选择它们,所以这是一个关于如何构建 Spring 配置以指导 Spring 选择正确 bean 的更普遍的问题。
如果这很重要,我不一定要保持相同的 Spring 配置布局 - 更多地寻找有关如何在此处正确执行操作的指导。
解决方案
推荐阅读
- python - sklearn2pmml 错误:构造 ClassDict 的预期参数为零(对于 pandas._libs.interval.Interval)
- postgresql - 如何将单个 Google Cloud SQL for PostgreSQL 实例上的多个数据库恢复到同一时间点?
- jquery - MCustomScrollbar 不工作,跳转到#id?
- php - php firebase 通知示例
- visual-studio-code - VSCode API:特定行的内联输入
- ios - Windows 中的“cordova run ios”不起作用
- google-maps - 如何为 Google 地图购买位置配额
- html - 具有左上边距的浮动框,具有垂直对齐和字体大小的响应式文本 div
- reactjs - 从 firebase 查询返回数据
- angular - Angular 7 Protractor 非 Angular 登录页面