@autowired和@resource的区别

用途

做bean的注入时使用

共同点

装配bean:写在字段上,或写在setter方法

不同点

  • @Autowired 属于Spring的注解 org.springframework.beans.factory.annotation.Autowired
  • @Resource 不属于Spring的注解,JDK1.6支持的注解 javax.annotation.Resource
  • @Autowired 默认按类型byType装配,依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,@Autowired(required=false),也可以使用名称装配,配合@Qualifier注解。
1 public class TestServiceImpl {
2     @Autowired
3     @Qualifier("userDao")
4     private UserDao userDao; 
5 }
  • @Resource 默认按名称byName进行装配,通过name属性进行指定,也提供按照byType 注入:
public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上
    
    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}
  • 属性:@Autowired按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
  • 属性:@Resource有两个中重要的属性:name和type。name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
  • 属性:需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

总结

大白话解释,@Autowired自动注解,举个例子吧,一个类,俩个实现类,@Autowired就不知道注入哪一个实现类,而@Resource有name属性,可以区分。

你可能感兴趣的:(Spring4.x,/,SpringBoot)