解決Autowired required a single bean, but 2 were found問題
阿新 • • 發佈:2019-02-01
今天使用RedisTemplate,程式碼如下:
@Controller
public class TemplateController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
RedisTemplate template;
執行後出現下面的錯誤
百度以後發現了原因:*************************** APPLICATION FAILED TO START *************************** Description: Field template in com.jzd1997.studyredis.TemplateController required a single bean, but 2 were found: - redisTemplate: defined by method 'redisTemplate' in class path resource [org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration$RedisConfiguration.class] - stringRedisTemplate: defined by method 'stringRedisTemplate' in class path resource [org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration$RedisConfiguration.class] 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
在使用Spring框架中@Autowired標籤時預設情況下使用 @Autowired 註釋進行自動注入時,Spring 容器中匹配的候選 Bean 數目必須有且僅有一個。當找不到一個匹配的 Bean 時,Spring 容器將拋BeanCreationException 異常,並指出必須至少擁有一個匹配的 Bean。
解決方案在錯誤提示裡面也提到了,我採用@Qualifier解決。
@Qualifier("XXX") 中的 XX是 Bean 的名稱,所以 @Autowired 和 @Qualifier 結合使用時,自動注入的策略就從 byType 轉變成 byName 了。 @Autowired 可以對成員變數、方法以及建構函式進行註釋,而 @Qualifier 的標註物件是成員變數、方法入參、建構函式入參。 示例 配合autowired使用: @Autowired @Qualifier("userService") public IUserService userService;