Spring MVC传统两个applicationContext的继承关系

1.springmvc的 上下文容器
springmvc项目中web.xml中可以定义两种参数:
    一个是 全局参数 (ServletContext),通过<context-param></context-param>声明, 在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
    一个是 servlet参数 ,通过在servlet中声明 <init-param> </init-param> 在servlet的init()方法中通过this.getInitParameter("param1")取得
全局参数 (ServletContext)  即根applicationContext 是通过listener初始化的; servlet参数  即孩子 ApplicationContext是通过servlet初始化的。

springMvc项目启动流程:
  • 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>
  • 容器创建一个ServletContext(上下文)。在该应用内全局共享。
  •  容器将<context-param></context-param>转化为键值对,并交给ServletContext.
  • 容器创建<listener></listener>中的类实例,即创建监听.该监听器必须实现自ServletContextListener接口
以上操作在 WEB项目完全启动之前被执行。
2.spring上下文容器配置
  spring提供了实现ServletContextListener接口的上下文初始化监听器:org.springframework.web.context.ContextLoaderListener
  spring需要我们指定容器的配置文件,然后由该监听器初始化并创建该容器。要求你指定配置文件的地址及文件名称,一定要使用:contextConfigLocation作为参数名称
spring配置时:在applicationContext.xml负责扫描controller的类 ,而在spring-mvc.xml中只负责扫描controller的类
  • applicationContext.xml中扫描非contorller的类

  • 在spring-mvc.xml中只负责扫描controller的类
启动流程:
  • servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext
  • 容器调用web.xml中配置的contextLoaderListener,初始化WebApplicationContext上下文环境。
  • 容器初始化web.xml中配置的servlet即DispatcherServlet ,并加载其设置的配置信息到该上下文中。将WebApplicationContext设置为它的父容器。
作用范围: 在DispatcherServlet中可以引用由ContextLoaderListener所创建的ApplicationContext中的内容,而反过来不行。
3.Spring mvc里分有两个WebApplicationContext,导致各种重复构造bean,各种bean无法注入的问题。  如何只产生一个 WebApplicationContext?
如下配置可以让spring只创建一个spring上下文。
父亲WebApplicationContext扫描所有的bean,包括controller,即都在 applicationContext.xml 里加载,而 s ervlet-context.xml 里配置为空即可。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值