刚开始使用时用的是@Resource,后来工作中就用了@Autowired,当时没有细究,知道是依赖注入的两种方式,现在来研究一下。
- @Resource导包javax.annotation.Resource,@Autowired导包org.springframework.beans.factory.annotation.Autowired,从导包上来看,前者不属于spring,是java自己的注解,后者是spring的。
- (1)@Autowired只根据type进行注入,不会去匹配name。默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
(2)@Resource默认按照ByName自动注入。
@Resource有两个重要的属性:分别是name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略