简介
@Autowrited、@Resource,是 Spring Boot 项目中,装配 Bean 对象的两个注解,都可以将 IOC 容器中的取出来使用。
本文介绍 @Autowrited 和 @Resource 注解的区别及使用场景。
区别
如下
| 特性 | @Autowired | @Resource |
|---|---|---|
| 来源 | Spring | JDK |
| 默认注入策略 | 按类型 | 按名称 |
| 是否可指定必须 | 可指定(required=false) | 不可 |
| 支持的注入方式 | 构造器、属性 | 属性(不支持构造器) |
| 另外 | 可以配合 @Qualifier 指定装配 Bean | 无额外配合使用的注解 |
使用场景
大多数情况,随便用,看项目中大多数是用哪个就用哪个,如下,
java
@Autowired
private Service3 service3;
@Resource
private OrderService orderService;
在 Spring Boot 中,代码规范推荐,@Autowired 推荐使用构造器注入,而不是属性注入

@Autowired 推荐这么用
java
private OrderService orderService;
@Autowired
public DemoController(OrderService orderService) {
this.orderService = orderService;
}
如果项目中有多个类型的 Bean,@Resource,需要在属性里指定使用哪个,如下:
java
@Resource(name = "service3Impl2")
private Service3 service3;
@Autowired 也需要,只不过不是在这个注解里指定,可以配合 @Qualifier、@Primary,如下:
java
@Autowired
@Qualifier("service3Impl2")
private Service3 service3;
或者在某个实现类上,加 @Primary,表示多个 Bean,没有指定就用我,我是主要的。
java
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
@Service
@Primary
public class Service3Impl implements Service3 {
}
综上,使用上区别很小,主要是 IOC 中有多个相同 Bean 时的解决方案。