Spring @Autowired按名称还是按类型注入豆类?
2022-09-01 19:15:22
我正在阅读春天开始(威利出版社)的书。在第 2 章中,有一个关于 Java 配置和 .它提供了这个类@Autowired
@Configuration
@Configuration
public class Ch2BeanConfiguration {
@Bean
public AccountService accountService() {
AccountServiceImpl bean = new AccountServiceImpl();
return bean;
}
@Bean
public AccountDao accountDao() {
AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
//depedencies of accountDao bean will be injected here...
return bean;
}
@Bean
public AccountDao accountDaoJdbc() {
AccountDaoJdbcImpl bean = new AccountDaoJdbcImpl();
return bean;
}
}
和这个常规的豆类
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
...
}
当我运行代码时,它可以工作。但是我预料到了一个异常,因为我在配置中定义了2个具有相同类型的bean。
我意识到它的工作原理是这样的:
- 如果 Spring 遇到多个具有相同类型的豆子,它会检查字段名称。
- 如果它找到一个具有目标字段名称的bean,它会将该bean注入该字段。
这不是错吗?Spring在处理Java配置时是否存在错误?