很多人第一次接触 Spring 时,都听过一句话:

Spring 是一个容器

但继续问:

容器是什么?很多人突然就不会了

有人说:容器就是装 Bean 的地方

也有人说:容器就是 BeanFactory

还有人说:ApplicationContext

这些都没错

但:都没有回答本质

因为:如果只是装对象:

Map<String,Object>

也能装

那为什么 Spring 要搞出这么复杂一套东西?

标题一、如果只是存对象,一个 Map 就够了

比如:

Map<String,Object> map = new HashMap<>();

map.put( "userService", new UserService());

取:

UserService service =(UserService)map.get("userService");

是不是已经:

能存
能取
能复用

看起来:已经像一个简单容器了

那 Spring 为什么不直接这样干?

因为:Spring 从来不只是想:“存对象”

二、Spring 真正关心的是对象的完整生命周期

前两篇已经讲过:

Spring 真正想拿走的是:对象控制权

既然接管:它就不能只负责:创建一下

还得负责:

什么时候创建
创建依赖谁
是否单例
是否延迟加载
是否需要代理
是否开启事务
生命周期怎么走

这意味着:Spring 容器不是对象仓库

而是:对象管理中心

三、Spring 容器更像一个“对象操作系统”

换个角度

很多人把 Spring 容器理解成:仓库

其实不太准确

它更像:操作系统

为什么?

因为操作系统也干类似的事:

创建进程

分配资源

调度

管理生命周期

销毁

Spring:

创建Bean

注入依赖

增强代理

管理生命周期

销毁

突然发现:很像

所以:

Spring 真正干的事情不是:存对象

而是:编排对象。

四、Spring 容器内部到底保存什么?

很多人以为:

Spring 启动:

new UserService()

结束。

其实不是

Spring 首先保存:

BeanDefinition

里面记录:

Bean 类型
依赖关系
是否单例
初始化方法
是否懒加载
作用域

相当于:对象档案

然后:真正需要时:

BeanDefinition

创建对象

注入依赖

增强

Bean

所以:Spring 容器管理的,不只是对象

还有:对象规则

五、为什么 Spring 几乎所有能力都依赖容器?

因为:

事务:需要容器创建代理

AOP:需要容器增强对象

@Autowired:需要容器注入依赖

生命周期:需要容器回调

如果脱离容器:

new OrderService();

这些能力直接失效

所以很多时候,不是Spring 不工作

而是:Spring 容器没接管

六、最后再回到那个问题:你天天用 Spring 容器,但可能根本不知道它的本质

不是:Map

不是:Bean仓库

甚至也不是:BeanFactory

它真正本质是:对象管理中心,或者对象操作系统

因为:它做的不只是,创建对象

而是:

定义

创建

装配

增强

生命周期管理

销毁

这才是:Spring 容器真正干的事

关于老潘:

持续拆 Spring、MySQL、Redis 底层原理,复盘真实线上问题。

一起把“会用”变成“看懂”。

如果有帮助,点个赞、收藏支持一下。

下一篇:Bean 为什么需要生命周期?90%的人只会背流程

感兴趣可以关注,避免刷着刷着找不到。

更多推荐