struts1源码阅读(4)
来源:互联网 发布:修改积分软件. 编辑:程序博客网 时间:2024/06/08 02:22
前几章也提到了,struts1对每个模块都会进行初始化,每次初始化都执行如下方法块:
ModuleConfig moduleConfig = initModuleConfig("", config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze();
对于方法initModuleConfig(),前面已经进行了详细的叙述,其主要的功能是将struts配置文件进行解析,并将相应标签对应的config对象放入ModuleConfig对象。
initModuleConfig()仅仅是对配置文件进行了解析,按照各标签的设置生成了相应的配置对象,并没有创建在处理请求时所需要的各种对象,部分对象实际上是在后面的初始化方法中创建的。下面对其他方法进行描述:
initModuleMessageResources()
执行操作:
1、获取ModuleConfig对象中所有MessageResourcesConfig对象,这个对象对应的是<message-resources>标签。
2、依次遍历每个MessageResourcesConfig对象,如果该对象的factory和parameter属性有一个为null,则执行下一个循环。这两个属性实际上对应<message-resources>标签的两个属性factory和parameter。如果factory没有进行设置,MessageResourcesConfig默认会设置成"org.apache.struts.util.PropertyMessageResourcesFactory"。
3、根据设置的工厂类型,生成工厂对象,由该工厂对象创建MessageResources对象,并将相应的属性值进行设置。如:null="true"。
4、最后将生成的MessageResources对象放入到servletContext中,对应的key为:"标签中配置的属性key的值+当前模块的前缀"。这里的属性key,实际上就是使用消息时的bundle。
initModuleDataSources()
initModulePlugIns()
该方法对配置的插件进行处理,执行过程:
1、获取ModuleConfig对象中所有PlugInConfig对象,这个对象对应的是<plug-in>标签。
2、创建与PlugInConfig对象数组等长的PlugIn对象数组,并存放到servletContext,对应的key为"Globals.PLUG_INS_KEY + config.getPrefix()"。
3、依次遍历每个PlugInConfig对象
3.1、依据配置中设置的className,生成相应的PlugIn对象,并将配置的属性值赋予这个对象。
plugIns[i] = (PlugIn)RequestUtils.applicationInstance(plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties());
3.2、执行PlugIn对象初始化方法。
void init(ActionServlet servlet, ModuleConfig config) throws ServletException;
moduleConfig.freeze()
在上面这些方法执行完毕后,ModuleConfig对象就不能再被修改。通过调用freeze()方法,修改标志位,后续如果再对moduleConfig对象内的任何对象进行修改,就会抛出异常。
- struts1源码阅读(4)
- struts1源码阅读(1)
- struts1源码阅读(2)
- struts1源码阅读(3)
- struts1源码阅读(1)
- struts1源码阅读看java反射
- struts1源码学习4
- struts1源码学习2(initChain)
- go源码阅读笔记(math.4)
- EventBus源码阅读(4)-Subscription
- xUtils源码阅读(4)-MemCacheKey
- Memcache源码阅读(4)---内存管理
- Java源码阅读之String(4)
- cocos2dx3.4源码阅读
- 源码阅读(草稿)
- 源码阅读(一)
- 源码阅读(二)
- 源码阅读(三)
- 驱动编程中的数据结构和编程方法
- 字符串的自适应size的获取(一句话的事儿)
- 爆iPhone 6和iOS 7正在测试 新产品或年中发布
- wpf编辑器:属性栏和动态中英双语
- ZeroMQ的测试结果
- struts1源码阅读(4)
- Jquery AJAX 跨域调用webservices
- 全面理解COM+
- Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
- 记录下自己的开发历程
- TA游戏推荐:黑暗画风3D动作游戏《恐惧之魂》
- c#操作进程、服务、注册表(源码测试通过)
- windows迁移linux问题集锦
- [HTML5系列实践之一]用HTML5做动态饼图