spring的refresh

发布于:2024-04-18 ⋅ 阅读:(21) ⋅ 点赞:(0)

在Spring框架中,`refresh` 方法是 `AbstractApplicationContext` 类的一个关键方法,它负责初始化或刷新整个Spring应用上下文。这个过程包括了创建和配置Bean,以及准备应用上下文以供使用。`refresh` 方法通常在应用启动时被调用,例如在Web应用的启动过程中,或者在独立应用的启动过程中。

 

`refresh` 方法的执行流程大致如下:

 

1. **准备刷新**:记录应用上下文的启动时间,设置活跃状态为`true`,并准备一个事件发布器。

 

2. **获取BeanFactory**:创建一个新的BeanFactory,通常是`DefaultListableBeanFactory`的实例。

 

3. **准备BeanFactory**:配置BeanFactory的基本属性,如类加载器、表达式解析器等。

 

4. **加载Bean定义**:从配置源(如XML文件、注解配置、Java配置类等)加载Bean定义到BeanFactory中。

 

5. **注册Bean后处理器**:注册实现了`BeanPostProcessor`接口的Bean后处理器,这些后处理器可以在Bean的初始化前后执行自定义逻辑。

 

6. **初始化消息源**:如果应用上下文配置了消息源,如国际化消息,那么在这里初始化。

 

7. **初始化应用事件广播器**:如果应用上下文配置了事件广播器,那么在这里初始化。

 

8. **初始化其他特殊Bean**:根据配置初始化其他特殊的Bean,如`ApplicationListeners`。

 

9. **刷新BeanFactory**:完成BeanFactory的初始化工作,包括Bean的实例化、依赖注入等。

 

10. **注册Bean的销毁钩子**:注册Bean的销毁钩子,以便在应用上下文关闭时能够正确地销毁Bean。

 

11. **完成刷新**:发布应用上下文刷新事件,通知所有注册的监听器上下文已经刷新。

 

12. **激活Bean**:激活所有实现了`SmartLifecycle`接口的Bean,使它们开始执行。

 

13. **发布上下文就绪事件**:发布上下文就绪事件,通知所有注册的监听器上下文已经准备好。

 

`refresh` 方法是Spring框架中非常核心的一个方法,它确保了Spring应用上下文的正确初始化和配置。开发者通常不需要直接调用这个方法,因为Spring的启动过程通常是自动完成的,例如在Spring Boot应用中,`refresh` 方法会在应用启动时自动被调用。