本文为struts 源码学习,主要涉及初始化属性资源文件的过程。资源文件分为内部资源文件和外部资源文件。
资源文件,不过是strus架构内部运用的,仍是用户自己界说的资源文件,都是资源文件。之所以会用到资源文件,有两个原因:
一是方面是体系经过装备来完成,那么就会有更好的扩展性,也会更灵敏。
另一个方面,能够完成国际化。
所以咱们或许会有一个或多个资源装备文件。
那么资源文件到底是怎么完成其初始化的呢?
内部资源文件和外部资源文件是分隔初始化的,其实是运用了不同的初始化办法。内部资源文件是由init()调用initInternal()直接初始化的,而用户的资源文件是经过装备模块完成的。
内部资源文件怎么初始化?
protected void initInternal() throws ServletException { |
上面的办法就完成了内部资源的初始化。
其实很简单,经过资源文件定位,然后回来成一个MessageResources的目标就OK了。
也便是internal变量,今后经过此变量就能够直接取特点的值了。
那么你或许会问,getMessageResources(internalName)又是怎么完成获得资源文件的?
咱们再盯梢一下:
public synchronized static MessageResources getMessageResources(String config) { |
很显着,这里边也运用了工厂方式。然后由工厂去生成一个资源MessageResources.
咱们能够这样了解,一切的资源其实归于同一类产品,所以他们但是运用同一个工厂。
上面的初始化工厂的部分,咱们其实能够看到, MessageResourcesFactory是一个笼统类,其笼统办法正是createResources(config),
那么他的完成是谁呢?这要问咱们的工厂,由于你只要知道了工厂,才会知道产品。
一切咱们要先知道,咱们初始化了一个什么工厂。
所以咱们再看:
public static MessageResourcesFactory createFactory() { |
其实工厂实由factoryClass决议的。
这在
protected static String factoryClass = |
界说了。
所以咱们能够看到,其实是PropertyMessageResourcesFactory完成了*.properties文件的初始化。
初始化后的成果在哪?怎么去运用呢?
内部资源文件初始化后的成果以MessageResources的实例保存在internal变量上。其界说如下:
protected MessageResources internal = null; |
所以只要struts内部能用,咱们就不能调用了。
用户的资源文件时怎么初始化的呢?
用户的资源文件是经过装备模块ModueConfig来完成的。上面咱们现已初始化了一个ModuleConfig了。所以咱们就可
以来初始化咱们的资源文件了。
initModuleMessageResources(moduleConfig); |
struts的内部分工也是十分显着的。
ModuleConfig用来办理各个不同的模块的装备。
其实,各个由他办理的模块也有自己的装备。
特点资源文件的装备是便是MessageResourcesConfig
此装备的实例由ModuleConfig来办理,一切由ModuleConfig的实例,能够得到一切特点文件装备的实例。
其实是每一个properties文件,就会对应一个MessageResourcesConfig.
所以咱们就能够了解下面的部分代码了。
protected void initModuleMessageResources(ModuleConfig config) |
这个当地得到是工厂的类的称号。如:
"org.apache.struts.util.PropertyMessageResourcesFactory"
经过这个,咱们和前面的比较就能够知道,只要是特点文件,就用的都是这个工厂。
String factory = mrcs[i].getFactory();
知道了用哪个工厂之后,就能够实例化了,创立一个工厂了。
MessageResourcesFactory.setFactoryClass(factory); |
由工厂生产出一个MessageResources
MessageResources resources = |
}
至此,strtus怎么初始化资源文件的进程也完成了。现在咱们现已知道了struts初始化特点资源文件的进程。
终究解析的成果是以MessageResources的方式保存在context中。
至于,怎么将properties文件解析成MessageResources,具体地进程和完成,再去细细的学习和研讨。
【修改引荐】
- 在Eclipse中开发struts应用程序
- 手把手教你在Eclipse中装备开发Struts
- Eclipse下开发struts完好处理乱码问题
- Struts相关布景介绍
- 运用Easy Struts for Eclipse开发Struts
知优网 » Struts 源码学习初始化特点资源文件的进程