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