一般来说,我们在整合spring和SpringMVC这两个框架中,web.xml会这样写到:

<!-- 加载spring容器 -->
<!-- 初始化加载application.xml的各种配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 配置springmvc前端控制器 -->
<servlet>
<servlet-name>taotao-manager</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation,
springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-MVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

首先配置的是Spring容器的初始化加载的application文件,然后是SpringMVC的前端控制器(DispatchServlet),当配置完DispatchServlet后会在Spring容器中创建一个新的容器。其实这是两个容器,Spring作为父容器,SpringMVC作为子容器。SpringMVC的子容器是可以访问父容器Spring对象的

我们按照官方推荐根据不同的业务模块来划分不同容器中注册不同类型的Bean:Spring父容器负责所有其他非@Controller注解的Bean的注册,而SpringMVC只负责@Controller注解的Bean的注册,使得他们各负其责、明确边界。配置方式如下

  1.在applicationContext.xml中配置:

<!-- Spring容器中注册非@controller注解的Bean -->
<context:component-scan base-package="com.hafiz.www">

<context:exclude-filter
type="annotation"
expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

  2.applicationContext-MVC.xml中配置

<!-- SpringMVC容器中只注册带有@controller注解的Bean -->
<context:component-scan base-package="com.hafiz.www"
use-default-filters="false">

<context:include-filter
type="annotation"
expression="org.springframework.stereotype.Controller" />

</context:component-scan>

疑问1 单利的bean在父子容器中是一个实例还是两个实例

    答:初始化两次,Spring 容器先初始化bean,MVC容器再初始化bean,所以应该是两个bean。

疑问2为什么不用spring加载所有的bean

答: SpringMVC容器中没有对象,没有对象就没有Controller,所以加载处理器,适配器的时候就会找不到映射对象,映射关系

为什么不用springmvc加载所有的对象

答: 网上很多文章说子容器不支持AOP,其实这是不对的。因为正常会有AOP的相关配置都在Spring容器中配置,如果都迁移到MVC配置文件,则所有bean都在子容器中,相当于只有一个容器了,所以也就实现了AOP。缺点是不利于扩展。

作者:
链接:http://www.imooc.com/article/16155
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

作者:
链接:http://www.imooc.com/article/16155
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

作者:
链接:http://www.imooc.com/article/16155
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

最新文章

  1. MVC 构建图片/文件选择器 参考其它CMS功能
  2. C# 反转字符串
  3. 批处理文件指定jre路径启动java桌面应用程序
  4. iOS直播点赞动画,iOS直播心型点赞动画
  5. Dubbo应用与异常记录
  6. 【软件使用】GitHub使用教程for VS2012
  7. IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS(转)
  8. 返回键 隐藏、、收起键盘textView|textField
  9. 复合事件ready,hover,toggle
  10. iOS开发——网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据
  11. html multiple select option 分组
  12. 放弃使用jQuery实现动画
  13. HDU1043 Eight(BFS)
  14. .NET Core 2.0 Preview2 发布汇总
  15. MacOS中升级openssl
  16. SpringBoot学习之基础篇
  17. 隐藏状态栏,toolbar前面空格问题,editText圆角
  18. excel表格获取汉字大写首拼函数(自定义宏)
  19. [学习笔记]Javascript的包装对象
  20. vuex深入理解 modules

热门文章

  1. 用fontcreator创建了一个半成品的字体
  2. 红帽rhel7.1usbguard
  3. 树莓派研究笔记(9)-- 树莓派SPI连接TFT屏幕
  4. Person.post请求------详细过程
  5. 带有通配符的字符串匹配算法-C/C++
  6. 非阻塞socket与epoll
  7. 友盟让用户数据动起来——给app增加运营
  8. [译]Javascript中的循环
  9. Java代码执行机制
  10. 「BZOJ 2440」完全平方数「数论分块」