@autowired 是 spring 实现依赖自动装配的核心注解,支持字段、构造器和 setter 注入,默认按类型匹配;推荐构造器注入,多 bean 时用 @qualifier 或 @primary 区分;支持集合/map 批量注入;required 默认为 true,字段注入不可用于构造器内。

@Autowired 是 Spring 提供的核心注解之一,用于自动将符合条件的 Bean 注入到字段、构造器或 setter 方法中,实现依赖的自动装配。
自动装配的基本用法
Spring 默认按类型(byType)匹配 Bean。只要容器中存在唯一匹配类型的 Bean,就能自动注入:
- 标注在字段上:最简洁,但破坏了类的封装性,且不利于单元测试
- 标注在构造器上:推荐方式,保证依赖不可变且非空,Spring 4.3+ 对单构造器场景可省略 @Autowired
- 标注在 setter 方法上:适合可选依赖或需要后期重设的场景
处理多个同类型 Bean 的情况
当容器中有多个相同类型的 Bean 时,仅靠类型无法确定注入哪一个,需配合其他注解明确目标:
- 使用 @Qualifier("beanName") 指定 Bean 的名称(注意大小写敏感)
- 配合自定义注解(如 @Primary、@Service("userServiceV2"))更语义化地标识首选项
- @Primary 可标记某个 Bean 为“首选”,当有多个候选时优先注入它
注入集合或 Map 类型依赖
Spring 支持批量注入:
- 声明 List
或 Set :自动注入所有匹配类型的 Bean - 声明 Map
:key 为 Bean 名称,value 为对应实例,便于按名查找
注意事项与常见问题
@Autowired 默认是 required = true,如果找不到匹配 Bean 会抛出 NoSuchBeanDefinitionException:
- 设为 @Autowired(required = false) 可让注入变为可选(不推荐,易掩盖设计问题)
- 字段注入无法在构造器执行前完成,因此不能在构造器中直接使用被注入的字段
- Lombok 的 @RequiredArgsConstructor 会为 final 字段生成构造器,与 @Autowired 构造器注入天然兼容
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











