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对象内的任何对象进行修改,就会抛出异常。

原创粉丝点击