@Autowired和@Resouce的区别
@Autowired默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。
@Autowired装配顺序
-
先根据所需组件的类型到IOC容器中查找唯一的bean
-
能找到唯一的bean,执行装配
-
找不到,装配失败
-
和所需类型匹配的bean不止一个:
- 没有@Qualifier注解:则根据@Autowired注解标记的位置的成员变量的变量名作为bean的id来匹配
- 能找到,执行装配、到不到,装配失败
- 有@Qualifier注解:则根据@Qualifier注解后指定的名称作为bean的id来匹配
- 能找到,执行装配、到不到,装配失败
- 没有@Qualifier注解:则根据@Autowired注解标记的位置的成员变量的变量名作为bean的id来匹配
-
@Resource装配顺序
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则再按照类型进行匹配,如果匹配则自动装配;