Could not autowire. There is more than one bean of ‘RedisTemplate‘ type原因
阿新 • • 發佈:2021-01-08
程式碼如下:
@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”)指定名稱注入。