spring引用RedisTemplate两次就创建2个连接吗?

@Autowired

RedisTemplate redisTemplate;

@Autowired

RedisTemplate<String, String> redisTemplateString2String;

这样使用是创建1个连接还是2个啊?

@Autowired

RedisTemplate redisTemplate;

@Autowired

RedisTemplate<String, String> redisTemplateString2String;

这样使用是创建1个连接还是2个啊?


回答:

AI Bot 的回答不大正确

如果没有定义泛型,Spring 会忽略泛型去找 RedisTemplate(因为 stringRedisTemplateredisTemplate 都是 RedisTemplate 的类型实例,Spring 搞不懂你到底需要导入哪个,也就是 歧义引入),所以大概率是会报错的:

Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

如果不写泛型又需要引入不同的类型正确的写法如下:

@Autowired

@Qualifier("redisTemplate")

private RedisTemplate redisTemplate;

@Autowired // 这个会根据泛型去找stringRedisTemplate

private RedisTemplate<String, String> redisTemplateString2String2;

可以在生成实例时进行测试

@PostConstruct

public void checkIfSameInstance() {

if (redisTemplate == redisTemplateString2String2) {

System.out.println("两者相同");

} else {

System.out.println("两者不同"); // 会输出这句

}

}

同理,明确一致的类型,则不会重复引入

@Autowired

private RedisTemplate<String, String> redisTemplate;

@Autowired // 这个会根据泛型去找stringRedisTemplate

private RedisTemplate<String, String> redisTemplateString2String2;

@PostConstruct

public void checkIfSameInstance() {

if (redisTemplate == redisTemplateString2String2) {

System.out.println("两者相同"); // 这时两者实例就一致了,会输出这句

} else {

System.out.println("两者不同");

}

}

补充相关参考:
@Autowired 官方文档
@Qualifier 官方文档


回答:

@Bean配置一下bean不就行了,每次都去容器中找已经创建好的那个实例

以上是 spring引用RedisTemplate两次就创建2个连接吗? 的全部内容, 来源链接: utcz.com/p/945536.html

回到顶部