Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
来源:互联网 发布:修复注册表软件 编辑:程序博客网 时间:2024/04/29 01:53
首先强调一下struts2的线程程安全,在Struts2中大量采用ThreadLocal线程局部变量的方法来保证线程的安全,像Dispatcher等都是通过ThreadLocal来保存变量值,使得每个线程都有自己独立的实例变量,互不相干.
接下来就从Dispatcher开始看起,先看其构造函数:
再看在FilterDispatcher创建Dispatcher的:
创建Dispatcher之后,来看init()方法
init()方法是用来Load用户配置文件,资源文件以及默认的配置文件.
主要分七步走,看下面注释
分七步载入各种配置属性,都是通过ConfigurationProvider接口进行的,这个接口提供init(),destroy(),register()等方法.
将各种ConfigurationProvider初始化之后将实例添加到ConfigurationManager的List里面.
最后通过循环调用List里的这些destroy(),register()等方法实现对配置文件的属性进行注册和销毁等功能.
下面将分析这七层功夫是怎样一步步练成的.
首先是init_DefaultProperties()
再来看第二步:init_TraditionalXmlConfigurations()
对于其它配置文件只用StrutsXmlConfigurationProvider,此类继承XmlConfigurationProvider,而XmlConfigurationProvider又实现ConfigurationProvider接口。
类XmlConfigurationProvider负责配置文件的读取和解析,
首先通过init()中的loadDocuments(configFileName);利用DomHelper中的
public static Document parse(InputSource inputSource, Map<String, String> dtdMappings) 将configFileName配置文件通过SAX解析方式按照DtdMappings解析成Document对象.
然后通过Provider的register()方法加载"bean"和"constant"属性,再通过loadPackages()加载package及package中的属性
addAction()方法负责读取<action>标签,并将数据保存在ActionConfig中;
addResultTypes()方法负责将<result-type>标签转化为ResultTypeConfig对象;
loadInterceptors()方法负责将<interceptor>标签转化为InterceptorConfi对象;
loadInterceptorStack()方法负责将<interceptor-ref>标签转化为InterceptorStackConfig对象;
loadInterceptorStacks()方法负责将<interceptor-stack>标签转化成InterceptorStackConfig对象。
而上面的方法最终会被addPackage()方法调用,addPackage又会被Provider的loadPackages()调用,将所读取到的数据汇集到PackageConfig对象中。
http://qidaoxp.javaeye.com/blog/494444
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider .
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续 .
- Struts2源码阅读(二)_Dispatcher&ConfigurationProvider
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
- Struts2源码浅析-ConfigurationProvider
- Struts2源码浅析-ConfigurationProvider
- Struts2源码阅读(三)_FilterDispatcher核心控制器
- struts2源码阅读2
- struts2源码阅读
- Struts2源码阅读
- 源码阅读(三)
- 顺治帝出家之迷终破解
- MyEclipse看不见SVN图标
- 关于图片上传
- PHP Memcached扩展安装
- 高效分页
- Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
- entOS linux Root密码忘了就这么办!
- 女生如何嫁给富豪
- Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
- ASP.NET2.0 文本编辑器FCKeditor (推荐)
- ASP.NET2.0轻松搞定统计图表【月儿原创】
- Struts2源码阅读(五)_FilterDispatcher核心控制器
- 完成dhtmlxtree的彻底完成
- 找工作知识梳理-MySQL命令