Spring Bean
·
文章目录
前言
把 Spring Bean (不是Java Bean) 讲透,你以后看 Spring 源码会顺很多。
一、Bean 到底是什么?
一句话:
👉 Bean = 被 Spring 容器管理的对象
举个最简单例子
@Component
public class OrderService {
}
这个类在 Spring 里就变成了一个:
Bean
二、Bean 和普通对象有什么区别?
对比一下你就明白了:
| 普通对象 | Bean |
|---|---|
| 你自己 new | Spring 创建 |
| 生命周期你控制 | Spring 控制 |
| 依赖手动传 | 自动注入 |
| 不可被 AOP 增强 | 可被代理增强 |
👉 本质区别:
Bean = “被Spring托管”的对象
三、Bean 是怎么来的?
有三种最常见方式:
① @Component(自动扫描)
@Component
class A {}
② @Bean(手动声明)
@Configuration
class Config {
@Bean
public A a() {
return new A();
}
}
③ 自动配置(Spring Boot)
RedisTemplate / DataSource / ObjectMapper
👉 都是自动变成 Bean
四、Bean 在容器里长啥样?
Spring 内部其实是:
Map<String, Object>
类似:
orderService -> OrderService实例
userService -> UserService实例
五、Bean 的名字怎么来的?
默认:
类名首字母小写
OrderService → orderService
你也可以指定:
@Component("myService")
六、Bean 生命周期(核心🔥)
一个 Bean 从出生到死亡:
1️⃣ 创建(实例化)
new 对象
2️⃣ 属性注入
@Autowired
3️⃣ 初始化
@PostConstruct
4️⃣ 使用中
被调用
5️⃣ 销毁
@PreDestroy
七、为什么必须有 Bean?
如果没有 Bean,你会写:
UserService userService = new UserService();
OrderService orderService = new OrderService(userService);
👉 层层依赖,代码爆炸
有了 Bean:
@Autowired
UserService userService;
👉 Spring帮你全部搞定
八、Bean + AOP(关键点🔥)
只有 Bean 才能被增强:
@Transactional
public void test() {}
👉 因为:
Spring 会给 Bean 创建代理对象
九、BeanDefinition(更底层一点)
刚才你看到的 Bean,其实背后是:
BeanDefinition(定义)
👉 它是:
Bean 的“说明书”
里面包含:
- 类名
- 是否单例
- 依赖关系
- 初始化方法
👉 流程:
BeanDefinition → Bean实例
十、Bean 作用域(scope)
默认:
singleton(单例)
也可以:
@Scope("prototype")
| 作用域 | 含义 |
|---|---|
| singleton | 全局唯一 |
| prototype | 每次 new |
| request | 每次请求 |
| session | 每个会话 |
十一、你现在可以这样理解(非常重要)
👉 Spring 世界里:
一切皆 Bean
包括:
- Controller
- Service
- Repository
- DataSource
- RedisTemplate
- 甚至 AOP 代理对象
十二、一句话总结(面试用)
👉
Bean 是由 Spring 容器创建和管理的对象,是 IOC 和 DI 的基础载体,负责承载业务逻辑并参与生命周期管理与 AOP 增强。
最后给你一个“顿悟点”
你之前学的:
- @Component
- @Autowired
- @Transactional
- 自动配置
其实都围绕一件事:
如何创建、管理、增强 Bean
如果你愿意,我可以再带你进入更底层一层:
👉 Bean 是如何“被创建”的(createBean 源码)
👉 Spring 是如何“实例化 + 注入 + 代理”的完整流程
👉 BeanFactory vs ApplicationContext 区别
这一步就已经是“源码级工程师”了 👍
更多推荐


所有评论(0)