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

版权声明:本文只为记录博主的学习点滴,欢迎转载与交流。 https://blog.csdn.net/u010758410/article/details/79950801

背景和概述

在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

阅读更多

没有更多推荐了,返回首页