Spring 中的 Bean 详解


目录


一、Bean 是什么?

定义

Bean 是由 Spring IoC 容器实例化、管理和维护的对象。

通俗理解

你自己创建对象:

1
UserService userService = new UserService();

Spring 帮你创建对象:

1
2
@Autowired
UserService userService;

👉 这个 userService 就是一个 Bean


二、Bean 是怎么创建的?

Spring 创建 Bean 主要有三种方式:

2.1 XML 配置(早期)

1
<bean id="userService" class="com.example.UserService"/>

2.2 注解(最常用)

1
2
3
@Component
public class UserService {
}

常见注解:

  • @Component
  • @Service
  • @Repository
  • @Controller

👉 本质:都是注册 Bean

2.3 Java 配置类

1
2
3
4
5
6
7
8
@Configuration
public class AppConfig {

@Bean
public UserService userService() {
return new UserService();
}
}

三、Bean 在容器中的作用

Spring IoC 容器主要做两件事:

3.1 创建对象(IoC:控制反转)

原来:

1
new UserService();

现在:
👉 由 Spring 容器统一创建

3.2 管理依赖(DI:依赖注入)

1
2
3
4
5
6
@Service
public class OrderService {

@Autowired
private UserService userService;
}

👉 Spring 自动注入依赖关系


四、Bean 生命周期(重点⭐)

4.1 生命周期流程

1
实例化 → 属性注入 → 初始化 → 使用 → 销毁

4.2 详细过程

4.2.1 实例化

1
new UserService()

4.2.2 属性注入

1
@Autowired

4.2.3 初始化

  • @PostConstruct
  • init-method

4.2.4 使用

👉 被业务逻辑调用

4.2.5 销毁

  • @PreDestroy
  • destroy-method

4.3 生命周期扩展点(面试高频)

  • BeanPostProcessor
  • Aware 接口

五、Bean 的作用域(Scope)

Spring Bean 默认是 单例模式

作用域 说明
singleton 单例(默认)
prototype 每次创建新对象
request 每个 HTTP 请求
session 每个会话

示例:

1
2
3
4
@Scope("prototype")
@Component
public class UserService {
}

六、一个实际场景帮助你理解 ⭐

6.1 电商系统结构

1
Controller → Service → DAO

6.2 不使用 Spring

1
2
UserService userService = new UserService();
OrderService orderService = new OrderService(userService);

问题:

  • 手动管理依赖
  • 高耦合
  • 难维护

6.3 使用 Spring

1
2
3
4
5
6
7
8
9
@Service
class UserService {}

@Service
class OrderService {

@Autowired
private UserService userService;
}

优势:

  • 自动创建对象
  • 自动注入依赖
  • 生命周期统一管理

七、一句话总结(面试用🔥)

Bean 是由 Spring IoC 容器管理的对象,负责对象的创建、依赖注入、初始化以及销毁。