@Autowired ` 和 `@Resource`

73 阅读1分钟

@Autowired@Resource 都是用于注入依赖对象的注解

共同点

  1. 可以用于字段和setter方法。
  2. 如果两者都写在字段上,不需要再写setter方法。

不同点

@Autowired

  • 来自Spring框架,需要导入 org.springframework.beans.factory.annotation.Autowired 包。
  • 默认按照 byType 进行注入。
  • 可以用于字段上或setter方法上。
  • 如果存在多个匹配类型的bean,可以结合 @Qualifier 注解使用,指定具体的bean名称。
public class TestServiceImpl {
    @Autowired
    private UserDao userDao; // 用于字段上

    @Autowired
    public void setUserDao(UserDao userDao) { // 用于属性的方法上
        this.userDao = userDao;
    }
}

@Resource

  • 来自J2EE,需要导入 javax.annotation.Resource 包。
  • 默认按照 byName 进行注入。
  • 可以通过 name 属性指定bean的名称进行注入。
  • 可以通过 type 属性指定bean的类型进行注入。
public class TestServiceImpl {
    @Resource(name = "userDao")
    private UserDao userDao; // 用于字段上

    @Resource(name = "userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}

总结

  • @Autowired 更灵活,可以按照 byType 进行注入,也可以结合 @Qualifier 指定bean名称。
  • @Resource 更注重按照名称进行注入,通过 nametype 属性指定。