Spring、SpringMVC及web容器的Context上下文

本文探讨了Spring框架的功能和结构,详细介绍了Spring在Web容器中的启动过程,特别是SpringMVC与web.xml的配置解析。SpringMVC的核心Servlet结构图展示了其内部工作原理。文章还阐述了ServletContext、ApplicationContext以及WebApplicationContext的区别与关系,强调了DispatcherServlet如何创建自己的ApplicationContext并共享根上下文的Bean。
摘要由CSDN通过智能技术生成

Spring 功能与结构

基于Java Beans的配置管理,采用IOC的原理,特别是对依赖注入技术的使用。这些都用来减少各组件间对实施细则的相互依赖性。
一个核心的,全局适用的Bean工厂。
一个一般抽象化的层面来管理数据库间的数据处理。
建立在框架内的,对Java数据处理API和单独的JDBC数据源的一般性策略。因此,在数据处理支持上对Java企业版本环境的依赖性得以消除。
和一些可持续性的框架,如Hibernate,JDO,MyBatis和db4o的整合。
Web应用中的MVC框架,基于核心的Spring功能,支持多种产生视图的技术,包括JSP,FreeMarker,Velocity,Tiles,iText,和POI。
大量的AOP框架以提供诸如数据处理管理的服务。同IOC的功能一样,目的是提高系统的模块化程度

Spring框架旨在分离体系结构的层次,由7个定义良好的模块组成,因此每一层都可以修改而不会影响到其它层。每一层都不知道其上层的关注点;就其可能而言,只对所紧挨的下一层有依赖。层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能松散。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理Bean的方式。

这里写图片描述

参考:https://my.oschina.net/xianggao/blog/417983

Spring java 工程

定义Bean
package com.king.helloworld.bean;
public class HelloWorld {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public void hello() {
        System.out.println("Hello, " + name);
    }
}
配置ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="helloWorld" class="com.king.helloworld.bean.HelloWorld">
        <property name="name" value="Tao Bangren"/>
    </bean>
</beans>
运行Main
public class Main {
    public static void main (String [] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-bean.xml");
    HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");
    helloWorld.hello();
    }
}

SpringMVC 在WEB容器中的启动过程与web.xml配置解析

  1. web应用部署在web容器中,web容器(如tomcat)提供其一个全局的上下文环境,这个上下文就是 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中,便于获取;
//**************************************************************
//实现ServletListener接口的类初始化方法中接收到通知事件
//**************************************************************
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
protected ContextLoader
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值