"白歌在 Code Review 时对小崔说:'你的 Service 里还在 new UserDaoImpl?让容器来装配依赖,这是 Spring 的底线。'这一章,你将掌握 Spring 提供的全套依赖装配工具,彻底告别手动 new 对象。"
Bean 的定义与依赖注入
本章定位
本章解决的核心问题:当 IoC 容器已经收纳了各类 Bean 之后,如何精确、灵活、可扩展地将它们装配到一起,实现真正的"依赖注入"。
学习路线图
学习顺序说明:先明确 Bean 的本质定义 → 掌握最核心注入注解 @Autowired → 学习处理多候选 Bean 的 @Qualifier 与 @Primary → 掌握值注入 @Value → 了解 JSR-330 标准注解 @Inject/@Named → 理解 JSR-250 的 @Resource → 最后深入延迟初始化与作用域控制。
文件关系说明
| 文件 | 一句话角色 |
|---|---|
Bean.md | 回归本质,理解 Spring 中"Bean"的定义与容器中的存在形式。 |
Autowired.md | 依赖注入的"主角",Spring 最核心、最常用的自动装配注解。 |
Qualifier.md | @Autowired 的"副手",当容器中有多个同类型 Bean 时精确点名。 |
Primary.md | 多候选 Bean 时的"默认赢家",与 @Qualifier 形成互补策略。 |
Value.md | 值注入注解,将配置文件中的字符串、SpEL 表达式注入字段。 |
Inject.md | JSR-330 标准注解,Spring 对 Java 标准的兼容实现。 |
Named.md | JSR-330 的命名注解,与 @Inject 配合使用实现按名注入。 |
Resource.md | JSR-250 标准注解,先按名称、再按类型的经典注入方式。 |
Lazy.md | 延迟初始化注解,控制 Bean 是否在容器启动时立即创建。 |
Scope.md | 作用域注解,决定 Bean 是单例、原型还是与 Web 请求同生命周期。 |
知识图谱
核心逻辑:@Autowired 是 Spring 生态的注入中枢;@Qualifier/@Primary 解决多候选冲突;@Value 解决配置值注入;@Inject/@Named/@Resource 体现 Spring 对 Java 标准的拥抱;@Lazy 与 @Scope 则从创建时机和生命周期维度控制 Bean 行为。
与下一章的衔接
本章学完后,你已经掌握了Bean 如何被定义、如何被注入。下一章「Bean 生命周期与作用域」将解决:Bean 从诞生到销毁的完整生命周期中,Spring 提供了哪些钩子让开发者介入——小崔需要在 Bean 创建后初始化连接池,李眉需要在应用关闭前释放资源,这些正是 InitializingBean、@PostConstruct、BeanPostProcessor 等机制要回答的问题。