@Autowired && @Resource
@Autowired(有required参数)
@Autowired原理:
举例:@Autowired
private BookService bookService;
1)、先按照类型去容器中找到对应的组件;bookService = ioc.getBean(BookService.class)
①、找到一个:找到就赋值
②、没找到就报异常
③、按照类型可以找到多个?找到多个如何装配上?
a、类型一样就按照变量名为ID继续匹配
Ⅰ、匹配上就装配
Ⅱ、没有匹配?报错
原因:因为我们按照变量名作为id继续匹配的
使用@Qualifier指定一个新的id
找到就匹配
@Resource
@Resource原理:
举例:@Resource
private BookService bookService;
1)、先按照类型去容器中找到对应的组件;bookService = ioc.getBean(BookService.class)
①、找到一个:找到就赋值
②、没找到就报异常
③、按照类型可以找到多个?找到多个如何装配上?
首先看Resource是否给name属性赋值
a、name没有赋值
类型一样就按照变量名为ID继续匹配
Ⅰ、匹配上就装配
Ⅱ、没有匹配?报错
原因:因为我们按照变量名作为id继续匹配的
b、name有值
在相同的类型中找与name值相匹配的bean的id
Ⅰ、匹配上了就装配
Ⅱ、没有匹配上?报错
二者区别
@Autowire 默认是按照类型匹配 如果想指定名称 需要搭配@Qualfile(value = '')
@Resource 作用与@Autowire类似,区别在于可以直接在@Resource中指定名称@Resource(name="") 相当于@Autowire和@Qualfile的结合