博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DispatcherServlet 和 ContextLoaderListener 的关系,到底用哪个?
阅读量:6533 次
发布时间:2019-06-24

本文共 2936 字,大约阅读时间需要 9 分钟。

hot3.png

我们先看下这两个东东的配置方法:

762929-20160716022324061-456360679.png

对于contextConfigLocation参数,有2个地方可以配置:

1)context-param 是全局性配置

2)servlet下的init-param 是局部性配置

若以上两处都设置了一个相同的bean配置文件路径,那么该文件内配置的bean会被初始化2次,所以一个配置文件只能选择一种配置位置;

项目中使用spring框架有2种方式:

1)listener下的ContextLoaderListener 是一种引入方式,默认读取/WEB-INF/applicationContext.xml

2)若是spring-web项目,DispatcherServlet 也是一种引入方式,默认读取/WEB-INF/${servlet-name}-servlet.xml

倘若以上2种配置都引入了,那么全局性的bean配置文件会被加载2次;而且2种方式的各自配置文件里的配置项在某种意义上并不是合并互补,而是各成一个体系(虽然普通的bean看似是都加载到全局上下文来了,但还是有一些特殊bean和配置项没有按预期的那样工作);

比如/WEB-INF/applicationContext.xml文件下里的AOP声明式配置:

若只是在全局配置项中,而没有在DispatcherServlet 中加载,那么此aop会无效。

762929-20160716022325123-606863080.png

所以,在web项目中,就不要使用ContextLoaderListener 和全局配置contextConfigLocation参数了,统一在DispatcherServlet 下配置,应该就不那么混乱了。如下:

762929-20160716022326295-640796794.png

这样结果就如我们的预期:多bean配置文件不会出现重复加载,所有aop配置也都生效。

以上论点是在spring4.3.1下亲测所得,当然是从表现猜测本质的,还没有真正去研读Spring的源码,所以若有原理说错之处,还望各位看官指出!

 

在web.xml文件中配置:

annomvc
org.springframework.web.servlet.DispatcherServlet
annomvc
/

指定Spring来处理请求的Servlet,默认查找mvc配置文件的地址是:/WEB-INF/${servletname}-servlet.xml,示例中默认查找的mvc配置文件是:/WEB-INF/annomvc-servlet.xml。

annomvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:config/annomvc-servlet.xml
annomvc
/

要修改mvc配置文件的位置,需要在配置DispatcherServlet时指定mvc配置文件的位置,只需要在配置DispatcherServlet时指定<init-param>标签。

  • 其他配置文件

这里的其他配置文件,指的是对datasource的配置、persistence层的配置、service层的配置信息等。要加载其他配置文件,需要在web.xml配置文件中加入一个ContextLoaderListener监听器来配置。ContextLoaderListener只监听初始化除mvc相关配置之外的bean。

org.springframework.web.context.ContextLoaderListener

若没有指定其他参数,默认查找的配置文件位置是:/WEB-INF/applicationContext.xml。

org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:config/service-context.xml classpath:config/persistence-context.xml classpath:config/datasource-context.xml

要修改除mvc配置文件这之外的其他bean的配置文件位置,只需要在web.xml中加入<context-param>标签。

  • ContextLoaderListener&ServletDispatcher

Spring中有两种上下文环境“Application Context”和“Web Application Context”,它们分别对应ContextLoaderListener和ServletDispatcher,且者可以用来配置bean的注入、装配、AOP。

1. ContextLoaderListener

ContextLoaderListener通过读取contextConfigLocatiion参数来读取配置参数,一般来说它配置的是Spring项目的中间层。对应到Spring的自动装配机制<context:component-scan>就是以下几种注解的装配。

(1) DAO : such as bean

(2) Entity : such as bean

(3)Service: such as bean

2. ServletDispatcher

它配置的是Web层组件的注入、装配和AOP。

(1)Controller

(2)ViewResolvers

(3)LocaleResolvers

(4)ThemeResolvers

 

 

转载于:https://my.oschina.net/LucasZhu/blog/1583342

你可能感兴趣的文章
android 4.2的新特性layoutRtl,让布局自动从右往左显示
查看>>
iOS tableView 下拉列表的设计
查看>>
sharepoint 2010 属性编辑工具 SPCamlEditor 1.5.1
查看>>
linux下配置网络环境
查看>>
java Windows7 下环境变量设置
查看>>
NBU异构还原Oracle完整备份的一些总结
查看>>
freeBSD安装详细讲解
查看>>
WSFC2016 VM弹性与存储容错
查看>>
文档管理,文本编辑控件TX Text Control .NET for WPF
查看>>
复习 Python 匿名函数 内建函数
查看>>
Security Identifiers | Win SRV2016 SID Change 修改
查看>>
看看来自日本的扫描,做网站需要注意的
查看>>
JDK 1.7+Android SDK+IntelliJ IDEA 13+Genymotion 安卓开发环境部署
查看>>
钓鱼邮件***防范指南
查看>>
session_start()放置位置的不正确引发的ROOT常量 未定义的错误
查看>>
如何设定VDP同时备份的任务数?
查看>>
ipsec的***在企业网中的经典应用
查看>>
过来人谈《去360还是留在百度?》
查看>>
mysql备份工具innobackupex,xtrabackup-2.1安装,参数详解
查看>>
【复制】slave筛选复制之二(create/drop table语句)
查看>>