1. 程式人生 > 其它 >Could not autowire. There is more than one bean of ‘RedisTemplate‘ type原因

Could not autowire. There is more than one bean of ‘RedisTemplate‘ type原因

技術標籤:javajavaspring

程式碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
class RedisdemoApplicationTests {
    @Autowired
    private RedisTemplate template;
    @Test
    public void a() {
        template.opsForValue().set("1","測試中文");
        System.out.println(template.opsForValue
().get("1")); } }

錯誤資訊

Could not autowire. There is more than one bean of 'RedisTemplate' type.
Beans:
redisTemplate   (RedisAutoConfiguration.class) stringRedisTemplate   (RedisAutoConfiguration.class) 

錯誤原因

StringRedisTemplate 類是RedisTemplate 的子類,子類注入時會呼叫父類。事實上我們可以理解為子類也是一種特殊的父類。
對於@Autowired註解,它是先根據型別注入,由於存在兩個RedisTemplate 型別,它不知道應該注入哪一個。然後根據名稱注入,由於該物件名稱為template,無法斷定型別,所以報錯。

解決方案

  • 1.將物件名改為redisTemplate使用@Autowired註解:@Autowired在根據型別無法判斷時會根據名稱進行注入。
  • 2.將物件名改為redisTemplate使用@Resource註解:@Resource會根據名稱進行注入。
  • 3.不改物件名,使用@Resource(name = “redisTemplate”)指定名稱注入。