一篇文章吃透Spring Bean,从入门到装逼全搞定!

B站影视 港台电影 2025-05-24 21:49 2

摘要:前几天,我去参加了一家大厂的社招面试,碰巧面试官劈头盖脸就问了我一个“经典老八股”——

大家好,我是小米,一个爱敲代码、爱喝奶茶、爱分享的 31 岁程序员大哥哥。

前几天,我去参加了一家大厂的社招面试,碰巧面试官劈头盖脸就问了我一个“经典老八股”——

“你能说一下什么是 Spring Beans 吗?”

我当时笑了笑,心想这题我太熟了,Spring 是我最早接触的框架之一,从 Spring3 到 SpringBoot,再到 SpringCloud,一路陪我走到现在,真的是有感情了。

所以这篇文章,我就来和大家分享下我当时是怎么回答的(当然现场比这个简洁点,面试后我又回忆整理了很多扩展知识),希望能帮到正在面试的你,或者正在系统学习 Spring 的你。

还记得我刚入职第一家公司,那时候还在用 Spring,XML 配置漫天飞,我那时刚学完 JavaSE,听说要学 Spring,直接有点头大。

有一天师傅拍着我的肩说:

“小米啊,这一段代码是配置 Spring Beans 的,咱们系统中最重要的就是 Bean 了,搞懂了你就能走上人生巅峰。”

我当时一脸懵:“Bean 是什么?是绿豆吗?”

师傅翻了个白眼:“你可以理解成是 Spring 世界里的一切,配置里定义的每个 Java 对象,都叫 Bean。”

当时我就记住了:Bean 是 Spring 中的核心组件,是被 Spring 容器管理的对象。

在正式讲概念之前,我们先来一段“官方范式”答法,这是我在面试时的开场白:

Spring Bean 是由 Spring IoC 容器实例化、组装和管理的对象,通常是应用程序中的核心组件。我们可以通过 XML、注解或者 Java 配置的方式将普通的 Java 类声明为 Spring Bean,由容器来统一管理它的生命周期和依赖关系。

是不是有点官方?别急,接下来我会把它掰开揉碎,一点点讲清楚。

咱们开发的时候,难道不是 new 一个对象就好了?为什么非要让 Spring 管理呢?

举个例子:

很普通,对吧?可是一旦业务复杂了:

对象之间依赖越来越多管理生命周期越来越麻烦想要解耦、替换实现越来越难

Spring 就站出来说:“别担心,我来帮你统一创建这些对象,还帮你把它们组装起来。”

于是就有了 IoC(控制反转) 和 DI(依赖注入)的概念,而 Spring Bean 就是 IoC 容器管理的“居民”。

在 Spring的时代,我们主要用 XML 定义 Bean,现在注解和 Java Config 也很常见了,这里我把三种方式都给大家展示一下:

1. XML 配置(经典老派)

你看,这就像是 Spring 容器的“户口本”,我们把所有的对象都登记了,Spring 会帮我们创建并注入它们的依赖。

2. 注解方式(现代主流)

加上 @Component、@Repository 等注解,Spring 会自动扫描包下的类,把它们注册为 Bean。

3. Java Config 配置(注解控福音)

这种方式更灵活、可测试,也不依赖注解扫描,更受一些框架开发者的青睐。

很多人理解 Spring Bean 只是“new 出来而已”,但其实它有一整个生命周期!

我面试时就顺手画了个图在纸上,讲给面试官看(字丑忽略):

实例化(Instantiation)属性注入(Populate properties)感知接口调用(如 BeanNameAware、ApplicationContextAware)初始化前处理(BeanPostProcessor#postProcessBeforeInitialization)初始化方法(@PostConstruct 或 InitializingBean)初始化后处理(BeanPostProcessor#postProcessAfterInitialization)使用中销毁前处理(@PreDestroy 或 DisposableBean)销毁

是不是挺复杂?但大多数我们只关心几个环节:

Spring 默认 Bean 是单例的(singleton),但它支持多种作用域:

1. 构造器注入(推荐)

优点是依赖不可变、强制依赖明确、便于测试。

2. Setter 注入(有些框架兼容性好)

适合可选依赖。

3. 字段注入(最简单但不推荐)

对测试不友好,不易扩展。

来个表格一键掌握:

说实话,这种问题本身不难,但 面试中拼的不是你是否知道,而是你表达得是否有条理、有逻辑、有深度。

如果你看到这里,小米想给你一个抱抱,因为你已经远远超过很多浮躁的“看标题党”程序员啦。

今天我们讲了:

其实每一次的面试,都是一次整理自己认知的机会。别小看一个“老掉牙”的问题,它可能就是你和 offer 之间的那堵墙。

Spring 虽然有点老了,但它是我们无数人入门的起点。我们从“配置 Bean”开始,学会了依赖注入、IoC 的哲学思想,也慢慢走进了更深的架构设计世界。

来源:三胖读书

相关推荐