@Autowired和@Resource

这两个都可以完成bean的配装,作用方式和功能也都一样,都可以作用在字段和属性的setter上。

区别是 @Autowired是spring的注解,而@Resource是jdk的注解。@Autowired使用的是AutowiredAnnotationBeanPostProcessor后置处理器,@Resource使用的是CommonAnnotationBeanPostProcessor后置处理器。

@Autowired默认根据类型(byType)查找bean,如果找不到或者找到多个则会报错。如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) 。如果想用名称装配则可以配合@Qualifier一起使用 :@Autowired @Qualifier("name")

@Resource默认根据名称(byName)查找bean,其中name和type属性最为关键,如果这两个属性都不指定则会先根据name进行查找,如果查不到就再根据type进行查找。如果指定了name就只按照name查找,找不到则报错。如果指定了type就只按type查找,找到多个或者找不到则报错。如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

posted on 2021-07-27 17:10  多看多记多写  阅读(216)  评论(0)    收藏  举报