Spring MVC中UserDao有两个实现类Bean时@Autowired注入哪个实例
结论
此时注入的是 UserDaoImpl 的实例。
原理说明
@Autowired默认采用类型优先、属性名兜底的注入逻辑:- 首先按注入的属性类型(此处为
UserDao)匹配Spring容器中的Bean,当匹配到多个同类型Bean时,会自动降级为按「注入属性的名称」和「Bean的id」做字符串匹配。 - 你在Controller中声明的注入属性名为
userDao,和XML中配置的id="userDao"的Bean(对应UserDaoImpl实现类)完全匹配,因此Spring会选择该实例完成注入。
- 首先按注入的属性类型(此处为
拓展说明
如果你需要注入UserDaoImpl2的实例,可以在@Autowired注解下方追加@Qualifier("userDao2")注解,显式指定要注入的Bean的id,即可绕过默认的属性名匹配规则。
如果注入的属性名和所有同类型Bean的id都不匹配,Spring会直接抛出NoUniqueBeanDefinitionException异常,提示存在多个同类型Bean无法确定注入目标。
内容的提问来源于stack exchange,提问作者Umashankar
相关产品推荐
相关产品推荐

