spring初始化流程

本文详细介绍了Spring的初始化流程,包括org.springframework.web.context.ContextLoaderListener初始化监听器的事件监听器初始化方法,以及调用方法初始化WebApplicationContext,初始化完成后将ApplicationContext放入ServletContext。还介绍了Spring应用上下文的各级接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring初始化流程

1.org.springframework.web.context.ContextLoaderListener初始化监听器

事件监听器的初始化方法
@Override
public void contextInitialized(ServletContextEvent event) {
initWebApplicationContext(event.getServletContext());
}
2.调用下面的方法,初始化WebApplicationContext
WebApplicationContext org.springframework.web.context.ContextLoader.initWebApplicationContext(ServletContext servletContext)

初始化完成之后,将对应的ApplicationContext放入到 ServletContext中.方便获取.
String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + “.ROOT”;
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

顶层接口,定义了应用的统一上下文:
org.springframework.context.ApplicationContext
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver
第二级接口
org.springframework.context.ConfigurableApplicationContext
org.springframework.web.context.WebApplicationContext
第三级接口
ConfigurableWebApplicationContext
AbstractRefreshableWebApplicationContext
XmlWebApplicationContext

### Spring 框架启动与初始化详细流程 Spring 容器的初始化过程是一个复杂的过程,涉及多个阶段和组件协作。以下是详细的解析: #### 1. 资源加载 Spring 启动时会先通过 `DefaultResourceLoader` 加载配置文件或其他形式的应用程序 Bean 配置信息[^5]。这些配置可以是 XML 文件、Java 注解或者 Groovy DSL 等多种形式。 #### 2. 创建 BeanDefinition 注册表 在完成资源配置加载之后,Spring 将基于所读取的信息构建一张 **BeanDefinition 注册表**。此注册表记录了所有的 Bean 及其元数据(如作用域、生命周期回调方法等),并将其存储于内存中以便后续操作[^3]。 #### 3. 初始化 DefaultListableBeanFactory 接着,在容器初始化的过程中,会调用一系列钩子函数来执行自定义逻辑,并最终返回一个已经完全初始化完毕的 `DefaultListableBeanFactory` 实例对象[^2]。该工厂主要承担两方面职责:一是管理所有已知类型的 Beans;二是依据需求动态生成新的实例。 #### 4. 特殊 Bean 处理 随后,Spring 开始扫描整个上下文中是否存在某些预定义好的特殊种类 beans (比如事件监听者、AOP代理等等)。如果发现有此类 bean 存在于当前环境中,则进一步激活它们的相关特性以增强框架的功能性。 #### 5. 应用级服务准备 最后一步就是实际创建那些被标记为单例模式下的 beans 并建立好相互之间必要的依赖注入关系。至此为止,整个 spring application context 已经处于可用状态,随时等待外部请求的到来。 #### 关键点补充 - 事务管理机制 值得注意的是,在上述整体流程之外还有一个非常重要的组成部分——即事务管理的支持。Spring 提供了一个统一而灵活的抽象层用于处理来自不同平台上的本地或全局性的交易控制行为[^4]。这意味着开发者无需关心具体的技术细节就可以轻松实现复杂的业务场景下的一致性和可靠性保障。 ```java // 示例代码展示如何简单配置事务管理器 @Configuration @EnableTransactionManagement public class TransactionConfig { @Bean public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); return builder.setType(EmbeddedDatabaseType.HSQL).build(); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } } ``` 以上便是关于 Spring Framework 初始话全过程的一个概览描述及其背后涉及到的一些核心概念和技术要点说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值