@Autowired是Spring Boot中按类型优先、字段名次选的依赖注入注解,支持构造器(推荐)、字段(不推荐)和Setter三种注入方式;多Bean时需@Qualifier指定名称或@Primary设默认项;注意不可用于static字段,单构造器可省略注解,非必需依赖可设required=false。

@Autowired 是 Spring Boot 中最常用的依赖注入注解,作用是让 Spring 容器自动把匹配的 Bean 实例“塞”进你的类里,不用手动 new 或查找。它默认按类型(byType)匹配,如果同类型有多个 Bean,再按字段名(byName)尝试匹配;匹配不到会报错,除非设 required = false。
支持的注入位置
这个注解能用在五种地方,但常用的是以下三种:
- 构造器上:Spring 官方最推荐的方式。对象一创建,依赖就齐全,不可变、易测试。
- 成员变量(字段)上:写法最简,但破坏封装、难做单元测试,不建议在复杂业务中滥用。
- Setter 方法上:适合依赖可能后期替换的场景(比如不同环境切换实现),但日常使用频率低于构造器注入。
同类型多个 Bean 怎么选
当接口有多个实现类(比如 UserDaoMysql 和 UserDaoOracle)时,只写 @Autowired 会报错——Spring 不知道该选谁。这时要加辅助注解:
- 用
@Qualifier("userDaoMysql")显式指定 Bean 名称(名称来自@Repository("userDaoMysql")或类名首字母小写)。 - 或者在某个实现类上加
@Primary,让它成为默认首选项,其他地方直接@Autowired就行。
常见注意事项
几个容易踩坑的点:
- 字段注入时不能用
static修饰——@Autowired管的是 Spring 管理的实例对象,而 static 属于类级别,容器不处理。 - 构造器注入时,若类只有一个构造器,
@Autowired可省略(Spring Boot 2.6+ 支持隐式构造器注入)。 - 如果某个依赖不是必须的,比如日志上报服务可有可无,就加上
@Autowired(required = false),避免启动失败。


















