springboot bean的生命周期
时间: 2024-01-04 14:39:48 浏览: 102
Spring Boot中的Bean的生命周期涉及几个阶段,以下是它们的顺序:
1. 实例化:容器根据配置或注解创建Bean的实例。
2. 属性注入:容器将依赖注入到Bean的属性中。
3. 初始化方法调用:如果Bean实现了InitializingBean接口,容器将调用其afterPropertiesSet()方法;或者可以通过在方法上使用@PostConstruct注解来指定初始化方法。
4. 自定义初始化方法:如果在配置文件中指定了自定义的初始化方法,容器将调用该方法。
5. 使用Bean:Bean可以在容器中被使用。
6. 销毁前方法调用:如果Bean实现了DisposableBean接口,容器将调用其destroy()方法;或者可以通过在方法上使用@PreDestroy注解来指定销毁前方法。
7. 自定义销毁方法:如果在配置文件中指定了自定义的销毁方法,容器将调用该方法。
需要注意的是,Spring Boot默认使用单例模式管理Bean,即一个Bean实例在整个应用程序中只有一个。但也可以通过配置更改作用域,例如使用@Scope注解指定为原型模式,这样每次获取该Bean时都会创建一个新的实例。
这些生命周期阶段允许开发人员在不同的阶段执行特定的操作,以满足应用程序的需求。
相关问题
springboot bean生命周期
Spring Boot 中的 Bean 的生命周期分为四个阶段:实例化、属性设置、初始化和销毁。
1. 实例化:当 Spring 容器创建 Bean 实例时,会调用其无参构造方法。
2. 属性设置:在实例化 Bean 后,Spring 容器会对其进行属性设置。
3. 初始化:当 Bean 的属性设置完成后,Spring 容器会调用其 @PostConstruct 注解标注的方法进行初始化。
4. 销毁:当 Spring 容器关闭时,会调用 Bean 的 @PreDestroy 注解标注的方法进行销毁。
springboot bean 生命周期
### Spring Boot 中 Bean 的生命周期详解
Spring Boot 中的 Bean 生命周期是一个复杂的过程,它涵盖了从实例化到销毁的所有阶段。以下是详细的阶段分解以及各阶段的作用:
#### 1. **实例化 (Instantiation)**
在这一阶段,Spring 容器会通过反射机制创建 Bean 的实例[^1]。这是整个生命周期的第一步。
#### 2. **属性赋值 (Populate Properties)**
容器将配置文件或注解中定义的依赖注入到刚刚创建的 Bean 实例中。这一步通常涉及 Setter 方法调用或者字段直接赋值。
#### 3. **设置 Bean 名称 (Setting Bean Name)**
如果实现了 `BeanNameAware` 接口,则在此阶段调用其方法并传入当前 Bean 的名称[^2]。
#### 4. **设置 Bean 工厂 (Setting Bean Factory)**
当 Bean 实现了 `BeanFactoryAware` 接口时,在此阶段将其与所属的工厂绑定起来。
#### 5. **设置应用上下文 (Setting Application Context)**
对于实现了 `ApplicationContextAware` 接口的 Bean,这里会为其提供对应用程序上下文的访问能力。
#### 6. **前置处理 (Pre-Initialization)**
如果有任何自定义的 `BeanPostProcessor` 被注册到容器中,那么这些处理器会在该阶段被触发,先执行它们各自的 `postProcessBeforeInitialization()` 方法[^3]。
#### 7. **初始化回调 (Initialization Callbacks)**
此时允许开发者指定某些特定操作以便于完成对象装配后的额外工作。可以通过三种方式实现:
- 实现 `InitializingBean` 接口;
- 配置 `<bean>` 元素中的 `init-method` 属性;
- 使用 `@PostConstruct` 注解标记的方法[^4]。
#### 8. **后置处理 (Post-Initialization)**
同样由之前提到过的那些已注册的 `BeanPostProcessor` 来负责,不过这次是调用各自对应的 `postProcessAfterInitialization()` 方法。
#### 9. **使用阶段 (Ready to Use)**
至此为止所有的准备工作都已经结束,现在这个完全成熟的 Bean 可供其他组件自由消费了。
#### 10. **销毁前清理资源 (Destruction Cleanup)**
最后但并非最不重要的一环就是释放内存空间之前的必要善后措施。具体做法如下所示:
- 如果某个类实现了 `DisposableBean` 接口的话就调用它的 `destroy()` 函数;
- 或者按照 XML 文件里设定好的 `destroy-method` 去找寻相应函数加以调用。
```java
// 示例代码展示 @PostConstruct 和 @PreDestroy 的使用
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class MyService {
public MyService() {
System.out.println("Constructor called");
}
@PostConstruct
public void init() {
System.out.println("@PostConstruct method executed.");
}
@PreDestroy
public void cleanup() {
System.out.println("@PreDestroy method executed before destruction.");
}
}
```
阅读全文
相关推荐












