💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
在 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 的核心思想——控制反转和依赖注入。