@Autowired 和 @Resource 都是用于注入依赖对象的注解
共同点
- 可以用于字段和setter方法。
- 如果两者都写在字段上,不需要再写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更注重按照名称进行注入,通过name或type属性指定。