spring与springMVC的细节问题:父子容器关系,加载controller,404错误

7人阅读 评论(0) 收藏 举报
分类:

背景和概述

在spring与springMVC中通过IOC可以管理bean对象,有两个配置文件可以配置ioc

  • spring的配置文件applicationContext.xml
  • springMVC的配置文件springMVC.xml

工作中我们用spring来管理service层和repertory层的bean对象,而让springMVC去管理controller
  
那么很自然有如下的疑问?

  • 1、能不能用springMVC的配置文件springMVC.xml来管理全部的bean对象,包括controller,service,dao?
  • 2、能不能用spring的配置文件applicationContext.xml来管理全部的bean对象,包括controller,service,dao?

答案是这样的

  完全可以用在spingMVC的而配置文件中来管理全部的Bean对象,但是不可以用spring来管理controller。

为什么是这样的?

Spring和SpringMVC父子容器关系

  在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。

spring与springMVC的细节问题

   spring是一个IOC容器,springMVC可以看做是一个springIOC容器的一个子容器,这个子容器有自己独有的逻辑和方法。其其中很重要的有:HandlerMapper处理器映射器),和HandlerAdapter处理器适配器),其配置如下:

<!-- 配置最新版的注解的处理器映射器 -->
<bean   class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> 
<!-- 配置最新版的注解的处理器适配器 -->
<bean   class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> 

  或者可以利用注解驱动去自动加载。

<!-- 注解驱动:
        作用:替我们自动配置最新版的注解的处理器映射器和处理器适配器  
        -->
    <mvc:annotation-driven></mvc:annotation-driven>

  值得注意的是springMVC在调用HandlerMapper进行urlcontroller函数方法映射解析的时候,HandlerMapper会在springMVC容器中寻找controller,也就是在子容器中寻找,不会去父容器spring容器中寻找的,所以当用spring的applicationContext.xml中配置了controller后,在访问页面的时候会出现404错误

我们来总结一下
  这样我们在清楚了spring和springMVC的父子容器关系、以及扫描注册的原理以后,根据官方建议我们就可以很好把不同类型的Bean分配到不同的容器中进行管理。再出现Bean找不到或者SpringMVC不能跳转以及事务的配置失效的问题

参考文章:
https://www.cnblogs.com/hafiz/p/5875740.html

查看评论

Spring、SpringMVC父子容器关系浅析

浅析配置文件:web.xml ... contextConfigLocation classpath:spring/applicationContext.xml ...
  • wuseyukui
  • wuseyukui
  • 2016-11-02 17:38:30
  • 3336

spring 和 springmvc 的父子容器关系浅析

spring 和springmvc 的父子容器 @controller中访问属性文件配置的属性 spring和spring mvc 中加载属性文件的顺序...
  • liudongdong0909
  • liudongdong0909
  • 2016-04-07 18:55:33
  • 3794

spring和springmvc的父子容器的关系

首先,必须先理解spring在web容器的是如何运行的。  1 对于一个web应用,当其部署在web容器上时,web容器就会给其提供一个全局的上下文环境ServletContext. 这个上下文环...
  • JJ_nan
  • JJ_nan
  • 2017-03-24 16:46:54
  • 1663

Spring和springmvc父子容器注解扫描问题详解

在springmvc中,我们经常配置两个xml,一个spring专属,一个springMVC专属,在这两个xml中我们都可以配置bean的自动扫描。 一般我们在spring.xml中不扫描@Cont...
  • u011217058
  • u011217058
  • 2017-07-25 15:32:36
  • 1162

spring和springmvc父子容器关系

今天碰到一个问题,在springmvc.xml中配置后加载不了properties配置文件中的属性,而在applicationContext-*.xml中配置却可以正常加载到属性,这个问题其实就涉及到...
  • cfp008
  • cfp008
  • 2016-12-21 00:12:11
  • 360

spring和springmvc父子容器的关系

大家都知道,在spring的配置中要分开配置service层的注解扫描,以及springmvc变现层的注解扫描,如下: 那么,问题来了,为什么不可以直接在spring的service...
  • LemonTreey
  • LemonTreey
  • 2016-11-08 10:32:46
  • 2449

SpringMVC上下文父子容器

在SpringMVC的启动依赖Spring框架,有时候我们在启动SpringMVC环境的时候,如果配置不当的话会造成一些不可预知的结果。下面主要介绍一下SpringMVC环境启动的时候context的...
  • dreamsunday
  • dreamsunday
  • 2016-05-22 09:34:25
  • 5698

spring的启动过程——spring和springMVC父子容器的原理

要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的。spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程。 ...
  • caomiao2006
  • caomiao2006
  • 2016-05-01 15:04:33
  • 17389

spring和springmvc父子容器的理解

这篇博客写一下对spring和springmvc父子容器的理解。 一、首先明确: (1)spring是一个大的父容器,springmvc是其中的一个子容器。父容器不能访问子容器对象,但是子容器可以访问...
  • zlj1217
  • zlj1217
  • 2017-04-09 21:09:51
  • 1210

spring和springMVC父子容器的原理

要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的。spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程。 ...
  • u012129558
  • u012129558
  • 2016-06-02 11:31:58
  • 3002
    个人资料
    持之以恒
    等级:
    访问量: 13万+
    积分: 1516
    排名: 3万+
    最新评论