我打算用一篇文章讲一下Spring

本文详细探讨了Spring容器的启动过程,从最初的XML配置到JavaConfig,再到SpringBoot的简化方式。介绍了如何通过监听器在Servlet容器启动时初始化Spring上下文,以及SpringMVC的配置方法。

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

参考Spring实现和SpringAction

最初我们可以在一个main方法中利用
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
启动一个Spring容器
里面我们一般配备了很多的bean的name和路径,Spring去扫描解析并加载生成这些bean

慢慢的我们发现xml太费事了,我们使用Java Config来写配置,这也是SpringBoot的基础
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan(“com.xxx”);
context.refresh();

最后衍生出了SpingBoot,我们常用一下代码启动一个Spring容器。
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);

除了最后一个SpringBoot的,其实我们很少见上面的两种写法,因为我们常常和Servlet规范一起使用
需要再web.xml中配置

contextConfigLocation
/WEB-INF/classes/applicationContext-*.xml


org.springframework.web.context.ContextLoaderListener

https://www.cnblogs.com/duanxz/p/5074584.html
用监听器的方式去监听servlet容器的启动,进而启动spring
如果使用SpringMVC的话,还需要配置

simpleSpringMVC/servlet-name>
org.springframework.web.servlet.DispatchServlet
1


simpleSpringMVC
*.htm

这段加载了Spring 的配置文件,初始化上下文。ContextLoaderListener是一个实现了ServletContextListener接口的监听器,在项目启动时触发 contextInitialized 方法(该方法主要完成ApplicationContext对象的创建),在关闭项目时会触发 contextDestroyed 方法(该方法会执行ApplicationContext的清理操作)

启动项目时触发contextInitialized 方法,该方法就做一件事,通过父类contextLoader的initWebApplicationContext 方法创建Spring上下文对象(ApplicationContext对象);
initWebApplicationContext 方法做了三件事:
    创建WebApplicationContext;
    加载对应的Spring文件创建的Bean实例;
    讲WebApplicationContext放入ServletContext(既javaweb的全局变量中)。
createWebApplicationContext 创建上下文对象,支持用户自定义的上下文对象,但必须继承自ConfigurableWebApplicationContext,而Spring MVC默认使用 ConfigurableWebApplicationContext 作为 ApplicationContext(它是一个接口的继承)。真正的实现类是XmlWebApplicationContext
configureAndRefreshWebApplicationContext 方法用于封装Application数据并且初始化所有相关的Bean对象。它会从web.xml中读取名为 contextConfigLocation 的配置,这就是 Spring xml 数据源的设置,然后放到ApplicationContext中,最后调用传说中的 refresh 方法执行所有java对象的创建。实际实现类是XMLWebApplicationContext
完成ApplicationContext创建之后就是将其放入ServletContext中,注意它存储的key值常量。

以及父子容器:
https://blog.youkuaiyun.com/dhaiuda/article/details/80026354

各个扩展点和钩子函数,bean加载流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值