【问题标题】:Where should I put @Qualifier when I have two @Beans?当我有两个@Bean 时,我应该把@Qualifier 放在哪里?
【发布时间】:2021-07-14 02:37:15
【问题描述】:
所以我有两个用于 redis 连接的 bean,我正在尝试指定某些时间来使用 redisB。如果我是正确的,我需要把 @Qualifier("redisB") 放在某个地方,但我不确定放在哪里。
第一个豆子
@Bean("default")
@Primary
public LettuceConnectionFactory redisConnectionFactory(){
...
}
第二个豆
@Bean("redisB")
public LettuceConnectionFactory redisConnectionFactory(final RedisProperties redisProperties){
...
}
【问题讨论】:
标签:
java
spring
redis
javabeans
【解决方案1】:
@Qualifier 注解用于在注入两个相同类类型的 bean 期间消除歧义。所以我对设置redis连接不是很熟悉,但是@Qualifier注解会在注入bean时使用,而不是在你显示的bean声明位置的代码中。
例如,如果另一个对象(如 RedisTemplate)在其构造函数中需要一个 redisConnectionFactory,并且您想指定要使用哪个 redisConnectionFactoryBeans,则看起来像这样。
@Bean("redisBTemplate")
public StringRedisTemplate stringRedisTemplate(@Qualifier("redisB") LettuceConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
这是一个示例,您将如何使用它将其注入另一个 bean,但是您可以在任何时候使用 @Qualifier 来注入其中一个 connectionFactory bean 来指定要注入的那个。它不会在 bean 声明期间使用。