Bean 生命周期按步骤理解
Spring Bean 的生命周期一直是面试和日常开发中绕不开的话题。很多人知道有几个回调方法,但对执行顺序和实际应用场景并不清楚。本文按初始化到销毁的顺序,把关键节点梳理清楚,结合实际代码说明每个阶段的作用。
先搭一个最小接口
以 Spring Boot 为例,一个接口最好保持分层清楚:
|
Controller 只负责接收请求和返回结果,业务逻辑放到 Service。这样代码更容易测试,也更容易维护。
配置和验证
如果涉及环境配置,建议拆分:
spring: |
生产环境启动时不要手工改文件,可以通过参数指定:
java -jar app.jar --spring.profiles.active=prod |
接口写完后,用 curl 验证:
curl http://localhost:8080/users/1 |
常见坑
- 事务方法必须通过 Spring 代理调用,类内部直接调用可能导致事务不生效。
- Controller 不要返回 Entity,避免数据库字段直接暴露。
- 参数校验和异常处理最好统一做,不要散落在每个接口里。
核心要点
构造器注入是 Spring 4.3+ 推荐的方式,能保证依赖在对象创建时就被注入
@PostConstruct 和 InitializingBean.afterPropertiesSet() 的执行顺序很关键
Aware 接口让 Bean 能够感知容器的上下文信息
销毁阶段的回调同样有两种方式:@PreDestroy 和 DisposableBean.destroy()
总结
理清 Bean 的生命周期,有助于理解 Spring 容器的工作机制,也能帮你在合适的时机执行初始化和清理逻辑。比如在 @PostConstruct 中建立数据库连接,在 @PreDestroy 中释放资源。