如何添加@Qualifier
How to add @Qualifier
如何添加限定符来区分这两个 bean?我知道我需要使用 @Qualifier 注释,但我不确定如何将它添加到 bean 中,然后如何创建引用适当 bean 的自动装配对象。
@Configuration
@Slf4j
@PropertySources(PropertySource("classpath:application.properties"),
PropertySource(value = ["file:${credentials.config}"]))
class CredentialsConfig(@Autowired private val env: Environment) {
@Bean fun getCredentials(): Credentials? {
val user: String = env.getRequiredProperty("user1")
val pass: String = env.getRequiredProperty("pass1")
return Credentials.info(user, pass)
}
@Bean fun getCredentials2(): Credentials {
val user: String = env.getRequiredProperty("user2")
val pass: String = env.getRequiredProperty("pass2")
return Credentials.info(user, pass)
}
}
您可以在执行凭据自动装配时添加带有 bean 名称的 @Qualifier。
@Autowired
@Qualifier("getCredentials")
Credentials credentials;
在这种情况下,我发现明确命名我的 bean 是有益的,这样我选择的 bean 就更清楚了。否则,您将得到 Spring 决定调用它的结果(基于方法名称)。当我们要注入一个bean,但是有多个bean时,我们在注入点处使用@Qualifer
注解,指定我们关心的bean的名字.
所以...
// In CredentialsConfig
@Bean("firstCredentials) fun firstCredentials(): Credentials = TODO()
@Bean("secondCredentials) fun secondCredentials(): Credentials = TODO()
并且在连接其中一个时,您可以添加一个 @Qualifier
来选择您的具体实现(请注意,如果您使用构造函数注入,则不需要 @Autowired
):
@Component
class MyComponent(@Qualifier("firstCredentials") creds: Credentials) { ... }
如何添加限定符来区分这两个 bean?我知道我需要使用 @Qualifier 注释,但我不确定如何将它添加到 bean 中,然后如何创建引用适当 bean 的自动装配对象。
@Configuration
@Slf4j
@PropertySources(PropertySource("classpath:application.properties"),
PropertySource(value = ["file:${credentials.config}"]))
class CredentialsConfig(@Autowired private val env: Environment) {
@Bean fun getCredentials(): Credentials? {
val user: String = env.getRequiredProperty("user1")
val pass: String = env.getRequiredProperty("pass1")
return Credentials.info(user, pass)
}
@Bean fun getCredentials2(): Credentials {
val user: String = env.getRequiredProperty("user2")
val pass: String = env.getRequiredProperty("pass2")
return Credentials.info(user, pass)
}
}
您可以在执行凭据自动装配时添加带有 bean 名称的 @Qualifier。
@Autowired
@Qualifier("getCredentials")
Credentials credentials;
在这种情况下,我发现明确命名我的 bean 是有益的,这样我选择的 bean 就更清楚了。否则,您将得到 Spring 决定调用它的结果(基于方法名称)。当我们要注入一个bean,但是有多个bean时,我们在注入点处使用@Qualifer
注解,指定我们关心的bean的名字.
所以...
// In CredentialsConfig
@Bean("firstCredentials) fun firstCredentials(): Credentials = TODO()
@Bean("secondCredentials) fun secondCredentials(): Credentials = TODO()
并且在连接其中一个时,您可以添加一个 @Qualifier
来选择您的具体实现(请注意,如果您使用构造函数注入,则不需要 @Autowired
):
@Component
class MyComponent(@Qualifier("firstCredentials") creds: Credentials) { ... }