`

spring的启动过程以及servlet加载springbean

阅读更多

 

需要先熟悉spring是怎样在web容器中启动起来的。spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程。

 

spring的启动过程:

  1. 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;

  2. 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;

  3. 再次,contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这个servlet可以配置多个,以最常见的DispatcherServlet为例,这个servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个servlet请求。DispatcherServlet上下文在初始化的时候会建立自己的IoC上下文,用以持有spring mvc相关的bean。在建立DispatcherServlet自己的IoC上下文时,会利用WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的parent上下文。有了这个parent上下文之后,再初始化自己持有的上下文。这个DispatcherServlet初始化自己上下文的工作在其initStrategies方法中可以看到,大概的工作就是初始化处理器映射、视图解析等。这个servlet自己持有的上下文默认实现类也是xmlWebApplicationContext。初始化完毕后,spring以与servlet的名字相关(此处不是简单的以servlet名为Key,而是通过一些转换,具体可自行查看源码)的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个servlet就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即根上下文(第2步中初始化的上下文)定义的那些bean。

说完了spring上下文的初始化过程,这三个上下文的关系应该就了解了。如还是不太清楚,我就爱莫能助了,只能自行看代码去了。

分享到:
评论

相关推荐

    Spring 管理filter 和servlet

    然而,这种模式存在一定的局限性,如难以处理复杂的依赖关系,以及在Filter和Servlet内部硬编码bean名称等问题。Spring通过其IoC容器,提供了更高级别的依赖管理和生命周期管理,使得Filter和Servlet能够更加灵活地...

    Web服务启动时自动加载Servlet,并读取数据库内容

    本例中,我们将讨论如何配置Web服务以在启动时加载Servlet,并利用Spring框架来读取和处理数据库内容。 首先,让我们了解Servlet的生命周期。Servlet有三个主要阶段:初始化(init)、服务(service)和销毁...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    4. **Spring Bean**:在应用程序启动时,通过Listener加载Spring容器,从而初始化所有Spring Bean。 理解这些组件之间的加载顺序对于确保Web应用按照预期的方式运行至关重要。此外,还应注意`filter-mapping`的顺序...

    spring 与 servlet整合

    2. **Spring的Servlet监听器**:如ContextLoaderListener,用于初始化Spring的ApplicationContext,加载配置文件并管理bean。 3. **HandlerMapping**:负责将请求映射到相应的处理器,Spring MVC提供了多种映射策略...

    Spring 自启动项目demo

    通过这个Spring自启动项目demo,我们可以学习到Spring如何管理和初始化Bean,以及如何使用Spring MVC来构建一个简单的Web应用。这只是一个基础的示例,实际项目中可能涉及到更复杂的配置和功能,如AOP(面向切面编程...

    spring+servlet 入门hello_world

    6. **启动配置**:在运行项目时,你需要确保Tomcat服务器配置正确,Spring的上下文加载正常,以及Servlet被正确地部署和初始化。 通过这个简单的"spring+servlet 入门hello_world"实例,你将学习到如何设置和运行一...

    在Servlet直接获取Spring框架中的Bean.docx

    需要注意的是,这两种方法都依赖于Spring容器已经初始化,并且Bean已经被加载到ApplicationContext中。通常,这会在Servlet容器启动时由Spring的`ContextLoaderListener`或`DispatcherServlet`完成。如果在Spring...

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    原生Servlet与Spring Controller性能比较--Servlet项目

    1. **初始化时间**:原生Servlet通常比Spring Controller更快地完成初始化,因为Spring需要加载配置、解析注解、建立对象图等步骤。 2. **请求处理速度**:对于单个请求,原生Servlet可能更快,因为它直接处理HTTP...

    spring依赖注入bean

    在 Java 应用中使用 Spring,我们需要创建一个 Spring 上下文(ApplicationContext)来加载 Bean 的定义。这个上下文将负责创建和管理 Bean,以及执行依赖注入。通常,我们可以使用 `ClassPathXmlApplicationContext...

    Spring中ApplicationContext加载机制

    ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供了多种方式来加载 ApplicationContext。...

    Servlet JSP Spring MVC初学指南(alin书签).pdf

    6. **Spring Bean管理**:理解IoC(Inversion of Control)和DI(Dependency Injection),以及如何使用XML或注解配置Spring Bean。 7. **数据绑定与表单验证**:Spring MVC如何自动将表单数据绑定到模型对象,以及...

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`<context-param>`和`...

    JspServletBean example

    **JspServletBean 示例详解** Java Servlet 是Java平台上的服务器端编程技术,它为Web应用程序提供了处理HTTP请求的能力。在Web开发中,JSP(JavaServer Pages)与Servlet经常一起使用,提供动态网页生成和业务逻辑...

    spring boot 开发 servlet filters listeners

    - 当 Spring Boot 应用启动时,可能会有一些初始化工作需要做,比如加载外部数据、建立连接池等。我们可以通过实现 `ServletContextListener` 来监听容器启动事件,并在 `contextInitialized` 方法中执行相应的操作...

    spring启动.txt

    Spring在Tomcat容器中的启动过程涉及多个步骤,从加载配置文件到创建`ServletContext`实例,再到初始化监听器及配置数据源等。这一系列的过程确保了Spring应用程序能够顺利地运行在Tomcat服务器上。理解这一流程对于...

    Spring+SpringMVC配置加载顺序1

    Spring 和 SpringMVC 的配置加载顺序是理解这两个框架协同工作的重要方面。...理解这些加载顺序和配置方式对于调试和优化Spring应用的性能至关重要,因为它们直接影响到Spring容器的初始化以及请求的处理流程。

    Servlet+JSP和Spring+MVC初学指南 书籍配套源码

    1. Spring容器:理解Bean的定义、依赖注入以及自动扫描。 2. Controller:创建Controller类,处理HTTP请求,并通过ModelAndView返回响应。 3. 视图解析:配置视图解析器,如InternalResourceViewResolver,将逻辑...

    加载spring 文件,在web.xml中的配置

    当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `<listener>`标签...

Global site tag (gtag.js) - Google Analytics