1、使用@Autowired注解实现根据类型实现自动装配
(1)在配置文件中添加
<context:component-scan base-package="SpringIoc03">
</context:component-scan>
(2)使用@Autowired
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public void save(){
System.out.println("bookService...正在调用dao帮你保存图书。。。");
bookDao.saveBook();
}
}
2、@Autowired原理
2.1、若此时有
@Autowired
private BookService bookService;
则先按照类型去容器中找到对应的组件,bookService = ioc.getBean(bookService.class)
(1)找到一个,则赋值
(2)未找到,抛异常
(3)找到多个?
按照变量名作为id继续装配:BookService(bookService)和BookServiceExt(bookServiceExt)
此时,按照bookService自动装配
2.2、若此时有
@Autowired
private BookService bookServiceExt2;
并且找到BookService(bookService)和BookServiceExt(bookServiceExt)
(1)匹配上,则装配
(2)未匹配,则报错
原因:根据成员变量名作为id还是找不到bean,
可以使用@Qualifier注解明确指定目标bean的id
为了解决上述问题可以
使用@Qualifier(“bookService”)指派一个新id,此注解也可以为方法的参数进行注解。
1)、找到:装配
2)、找不到:报错
3、@Autowired、@Resource、@Inject的区别
@Autowired:最强大;是Spring自己的注解
@Resource:j2ee,java的标准,其扩展性更强,若切换成另一个容器框架,@Resource依旧还可以使用,但@Autowired不行
@Inject:EJB