@Autowired 和 @Resource的区别

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)
经验分享 程序员 微信小程序 职场和发展