Bean和对象是一回事吗?
这是个非常好的问题!虽然 "Bean"和"对象"有关系,但它们在语境上不完全等价,有一些微妙但重要的区别:
✅ 相同点:都是某个类的实例
名称 | 对象 | Bean |
都是用new出来的类的实例 | ✅ | ✅ |
☆☆☆☆☆ 所以在本质上,Spring Bean也是一个Java对象。
Bean是对象,而对象不一定是Bean,对象的概念包含Bean的概念。
从某种程度上来讲,"Bean"更高级,更自动化,好比"对象"是洗衣劳动者,而"Bean"则是一台洗衣机。
❗ 不同点:Spring Bean是特指的"被Spring容器管理的对象"
名称 | 对象 | Bean |
谁创建它? | 你手动用new | Spring容器自动创建 |
是否托管? | ❌ 不托管 | ✅ 被 Spring 管理(生命周期、依赖等) |
是否可自动注入? | ❌ 不能 | ✅ 可以用@Autowired等注入 |
生命周期控制? | ❌ 你手动控制 | ✅ Spring 控制整个生命周期 |
配置方式 | 你写代码创建 | 通过注解(如@Service、@Component)或XML配置创建 |
✅ 举个例子:同一个类,差距来了
public class OrderService { public void doSomething() {} }
➤ 普通 Java 对象
OrderService orderService = new OrderService(); // 你手动new出来
这是一个普通对象,☆ (重点) Spring 完全不知道它的存在 (重点) ☆,不能@Autowired到其他地方!
➤ Spring Bean
@Service public class OrderService { public void doSomething() {} }
配合:
@Autowired private OrderService orderService;
Spring会自动扫描、创建、注入,这就是Spring Bean。
🧠 总结记忆口诀:
✅ “Bean 是对象,但对象不一定是 Bean。”
- Bean是被Spring容器管理的对象
- 普通对象则是你手动new出来的,Spring不知道也不会管理它