Java Spring为候选人挑选提供了多个级别
我有一个可以用多种方式初始化的bean,例如:Java Spring为候选人挑选提供了多个级别,java,spring,Java,Spring,我有一个可以用多种方式初始化的bean,例如: 如果一个bean没有任何@命名的/@限定符//@Profile/等注释,则选择该注释 否则,如果有一个bean具有@Profile,请选择该bean 否则,将使用@Value(“属性”) 例如,像这样的例子: class SpringConfig { // Priority 1 @Bean User user() { ... } // Priority 2 @Bean @Profile("profile1") Us
- 如果一个bean没有任何
@命名的
/
@限定符
/
/
/等注释,则选择该注释@Profile
- 否则,如果有一个bean具有
,请选择该bean@Profile
- 否则,将使用
@Value(“属性”)
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”环境变量用“Priority 3”初始化用户
我不认为@Primary
在这里不起作用,因为这里有两个以上的候选人
可能有更多或不同种类的级别或逻辑来选择它们,因此这是一个关于如何构造Spring配置以引导Spring选择正确bean的更一般的问题
如果这很重要的话,我不必保持相同的Spring配置布局-更多的是在这里寻找如何正确操作的指导。为什么不单独通过配置文件进行配置?@daniu Env var和配置文件在库中,其他应用程序都会使用。某些应用程序要求更改此默认行为,因此需要覆盖。一些应用程序根本不使用
@Profile
,只是求助于vars。有没有一种方法可以以某种方式将它们结合起来?但是如果env-var-one(即Prio 3,对吗?)在库中,您可以使用它并根据需要在应用程序属性中设置“user”变量。@daniu如果我同时指定var+profile(某些应用程序会这样做),则profile优先,所以,应用程序中的var将被忽略。我似乎真的没有一个足够准确的图片来描述所有事情是如何与你们一起布置的。应用程序并不真正属于libs,但它听起来就像你拥有的一样。通常情况下,环境变量具有优先权(例如,java-Duser='name'您的.App
),因此,也许这就是您说服应用程序使用正确值的方式。为什么不单独通过配置文件进行配置呢?@daniu Env var和配置文件都在库中,其他应用程序都会使用。某些应用程序要求更改此默认行为,因此需要覆盖。一些应用程序根本不使用@Profile
,只是求助于vars。有没有一种方法可以以某种方式将它们结合起来?但是如果env-var-one(即Prio 3,对吗?)在库中,您可以使用它并根据需要在应用程序属性中设置“user”变量。@daniu如果我同时指定var+profile(某些应用程序会这样做),则profile优先,所以,应用程序中的var将被忽略。我似乎真的没有一个足够准确的图片来描述所有事情是如何与你们一起布置的。应用程序并不真正属于libs,但它听起来就像你拥有的一样。一般来说,环境变量具有优先权(例如,java-Duser='name'您的.App
),因此,也许这就是您说服应用程序使用正确值的方法。