关于@Autowired和@Resource的详细区别(面试题)
关于@Autowired和@Resource的区别(面试题)
共同点:使用这2种注解都可以实现自动装配!
区别:
@Resource
注解是javax
包中的注解,它是优先byName
来装配的,如果byName
无法装配,则会自动尝试byType
装配,在byType
装配时,要求匹配类型的对象必须有且仅有1个,如果无法装配,则会报告错误。
@Autowired
注解是Spring框架中的注解,它是优先byType
来装配的,但是,这个过程中,只会检索匹配类型的对象的数量,并不直接装配,如果找到的对象的数量是0个,则直接报错,如果找到的对象的数量是1个,则直接装配,如果找到的对象的数量(类型)超过1个(2个或更多个),则会尝试byName
来装配,如果byName
装配失败,则报错。(虽然老师进行试验不能直接看出来,但是这个答案的依据是来自Spring的官方文档,是正确的。)
面试时,要知道区别后应该怎么用?
在实际开发项目时,绝大部分情况下,需要装配的对象都是有且仅有1个的,并且命名都是规范的,所以,无论byType
或byName
都是可以装配成功,就不必在乎装配方式和做法,在以上2个注解的选取方面,通常也没有明确的要求!
补充:
@Autowired为Spring提供的注解,需要导入包:
org.springframework.beans.factory.annotation.Autowired。
@Resource注解由J2EE提供,需要导入包:
javax.annotation.Resource