Spring 容器解析:spring-core、spring-beans 与 spring-context 的运行机制
·
我写这篇文章的对象是:正在学习 Spring Framework 的 Java 开发者,尤其是对 Spring 容器的运行机制感到困惑的同学。在工作中,我曾经因为没有搞清楚容器的加载顺序和依赖关系,导致 Bean 初始化失败。后来把核心模块理清楚后,问题迎刃而解。所以本文会结合我的经验,把 spring-core、spring-beans、spring-context 的作用和联系说明清楚,帮助初学者避免类似的坑。
1. spring-core:容器的底层支持
- 提供 IoC 容器的基本接口,如
BeanFactory; - 包含 资源加载机制(Resource 抽象),方便统一访问文件、URL 等资源;
- 内置工具类(反射、类型转换)。
代码示例(最小容器用法):
Resource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
UserService userService = factory.getBean("userService", UserService.class);
这里 BeanFactory 就是最轻量级的 Spring 容器实现。
2. spring-beans:Bean 的定义与依赖注入
在 spring-core 基础上,spring-beans 模块提供:
- BeanDefinition:存储 Bean 的类名、作用域、依赖关系;
- 属性注入与依赖管理;
- Bean 生命周期管理(初始化、销毁回调)。
实际场景:在一个用户管理系统里,如果 UserService 依赖 UserRepository,容器会在创建 Service 时自动完成依赖装配。
3. spring-context:增强型容器
- ApplicationContext:比
BeanFactory更强大,支持事件机制和注解驱动; - 国际化(i18n)支持;
- 事件监听,如
ApplicationListener; - 注解扫描(
@ComponentScan、@Autowired)。
示例:
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
OrderService orderService = ctx.getBean(OrderService.class);
与 BeanFactory 不同,ApplicationContext 会在容器启动时预加载所有单例 Bean,更适合企业级应用。
4. Spring 容器的运行机制
容器的启动流程一般分为五步:
- 读取配置(XML、注解或 Java Config);
- 解析 Bean 定义(转换为 BeanDefinition);
- 实例化与依赖注入;
- 调用生命周期回调(
init-method、@PostConstruct); - 容器关闭时销毁 Bean。
示意图(可画成图,下面先用文字表示):
配置文件/注解 -> BeanDefinition -> IoC 容器 -> Bean 实例化 -> 依赖注入 -> 生命周期管理
5. 我的经验
在我的项目里,我发现:
- 如果只是写一个工具程序,用
spring-core + spring-beans就够了; - 如果是企业应用,一定要用
spring-context,因为注解和事件机制能大大减少配置量; - 开发时,最好对 Bean 的作用域和生命周期有清晰认识,否则可能遇到懒加载或多例 Bean 导致的资源问题。
我的代码里有个小习惯:每个自定义 Bean 都会加上注释 // author: LLL,方便团队里区分是谁写的代码。
总结
本文介绍了 Spring 容器 的三大核心模块:
spring-core:基础设施,提供 BeanFactory;spring-beans:Bean 的定义与依赖注入;spring-context:增强功能,提供 ApplicationContext、事件、注解驱动。
希望这篇文章能帮助刚入门的同学快速理解 Spring 容器的分层和运行机制,避免在实际开发中因为容器不清晰而踩坑。
更多推荐



所有评论(0)