@Autowired和@Resource究竟有何区别(超详细,一点就通)

相信大家都认识@Autowired和@Resource这两个注解,可真当别人问起这两个注解有什么区别的时候,竟一瞬间不知道该怎么说,那种感觉是相当的酸爽,今天小博主就在这里为大家详细讲述一下这两个注解的区别.

@Resource的作用相当于@Autowired,只不过@Autowired按byType(类型)自动注入,而@Resource默认按 byName(名称)自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource装配顺序

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型 进行匹配,如果匹配则自动装配

@Autowired装配顺序

@Autowired默认是根据类型进行自动装配的,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题.

@Qualifier注解

当IOC容器中有多个接口实例时用于过滤所需的实例

1.和@Autowired配合使用
2.在@Bean修饰方法时注解形参

个人总结

@Autowired//默认按type注入
@Qualifier(“cusInfoService”)//一般作为@Autowired()的修饰用
@Resource(name=“cusInfoService”)//默认按name注入,可以通过name和type属性进行选择性注入
一般@Autowired和@Qualifier一起用,@Resource单独用。 当然没有冲突的话@Autowired也可以单独用

你可能感兴趣的:(技术类,spring,boot,spring,java)