@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的结合

posted @ 2021-03-23 16:36  忆尘不散  阅读(43)  评论(0)    收藏  举报