在 Spring Boot(以及 Spring 框架)中,Bean 是一个核心概念,理解它对于掌握 Spring 开发至关重要。
什么是 Bean?
Bean 是由 Spring 容器(IoC 容器)管理的 Java 对象,它具有以下特点:
- 由 Spring 容器创建和管理 - 不是由开发者直接
new出来的对象 - 生命周期由容器控制 - Spring 负责 bean 的创建、初始化和销毁
- 可被依赖注入 - 其他 bean 可以通过依赖注入使用它
- 通常是单例的 - 默认情况下,每个 bean 在容器中只有一个实例
Bean 的常见类型
应用组件:
@Controller- 处理 HTTP 请求@Service- 业务逻辑层@Repository- 数据访问层@Component- 通用组件
配置类:
@Configuration类中带有@Bean注解的方法返回的对象
第三方库集成:
- 如
DataSource、JdbcTemplate等由 Spring Boot 自动配置的 bean
- 如
如何定义 Bean?
1. 使用注解(最常见的方式)
@Service
public class UserService {
// 业务逻辑
}
@Repository
public class UserRepository {
// 数据访问代码
}
2. 使用 @Bean 方法(在配置类中)
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
Bean 的生命周期
Spring 管理的 bean 有完整的生命周期:
- 实例化 - 容器创建 bean 实例
- 属性赋值 - 注入依赖(通过
@Autowired等) - 初始化 - 调用
@PostConstruct方法或实现InitializingBean接口 - 使用 - bean 处于就绪状态,可被应用使用
- 销毁 - 调用
@PreDestroy方法或实现DisposableBean接口
Bean 的作用域
Spring Bean 有几种作用域(通过 @Scope 指定):
- singleton(默认) - 每个容器一个实例
- prototype - 每次请求都创建新实例
- request - 每个 HTTP 请求一个实例(Web)
- session - 每个 HTTP 会话一个实例(Web)
- application - 整个 Web 应用生命周期一个实例
为什么需要 Bean?
- 控制反转(IoC) - 将对象的创建和管理权交给容器
- 依赖注入(DI) - 自动解决对象间的依赖关系
- 方便管理 - 统一的生命周期管理
- 易于测试 - 可以轻松替换实现(如 Mock)
- 促进松耦合 - 通过接口而非具体实现编程
实际示例
@Service
public class OrderService {
@Autowired
private PaymentService paymentService; // 注入另一个bean
public void processOrder(Order order) {
paymentService.processPayment(order);
}
}
在这个例子中:
OrderService和PaymentService都是 Spring bean@Autowired实现了依赖注入- Spring 容器管理它们的生命周期和依赖关系
理解 bean 的概念是掌握 Spring Boot 开发的基础,它代表了 Spring 的核心思想——控制反转和依赖注入。
全部评论(0)
还没有任何评论哟~