1.@Autowired是Spring的,@Resource是javax包下的。

2.@Autowired默认按类型匹配,@Resource默认按名称匹配

3.@Autowired默认按类型匹配,

  • spring容器中没有该类型的bean,报NoSuchBeanDefinitionException
  • 有一个,注入找到的bean
  • spring容器中有多个该类型的bean。若@Autowired作用在字段上,用字段名去匹配,若匹配成功注入,否则报NoUniqueBeanDefinitionException。若@Autowired作用在setter方法或构造器方法上,用形参名去匹配,若匹配成功注入,否则报NoUniqueBeanDefinitionException。

4.@Autowired和@Qualifier一同使用,@Qualifier指定bean的名称,当类型和名称都匹配时注入,否则报NoSuchBeanDefinitionException。@Autowired作用在setter或构造器方法时,@Qualifier需作用在方法的形参上。

5.@Resource默认按名称匹配,若作用在字段上用字段名,若作用在方法上用方法的形参名,若用名称匹配成功,注入。若用名称匹配失败,用类型匹配,有三种情况,没有、匹配到一个或多个。按类型没有匹配到,报NoSuchBeanDefinitionException;若匹配到一个,注入;若匹配到多个,报NoUniqueBeanDefinitionException。

6.@Resource

  • 指定name,按名称匹配。若用名称匹配成功,注入。若用名称匹配失败,报NoSuchBeanDefinitionException。
  • 指定type,按类型匹配。有三种情况,没有、匹配到一个或多个。按类型没有匹配到,报NoSuchBeanDefinitionException;若匹配到一个,注入;若匹配到多个,报NoUniqueBeanDefinitionException。
  • 指定name和type,名称和类型同时匹配,若匹配成功,注入,否则报NoSuchBeanDefinitionException。
    (使用Spring容器的情况下,才报NoSuchBeanDefinitionException、NoUniqueBeanDefinitionException)
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐