@Autowired 和 @Resource的区别
1.@Autowired是Spring的,@Resource是javax包下的。2.@Autowired默认按类型匹配,@Resource默认按名称匹配3.@Autowired默认按类型匹配,spring容器中没有该类型的bean,报NoSuchBeanDefinitionException有一个,注入找到的beanspring容器中有多个该类型的bean。若@Autowired作用在字段上,用字
·
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)
更多推荐
已为社区贡献1条内容
所有评论(0)