velocity源码分析:初始化之ResourceManager

之前在“velocity源码分析:velocity初始化”文章中粗略地介绍了velocity整体的初始化过程,包括各个系统的初始化,本文主要介绍Resource相关初始化,本文内容涉及到的概念比较多,也是velocity中比较重要的一部分初始化内容,期间设计到代码使用的template等概念。

还是先以一张类图开始,如图1:


(图1)


ResourceManager在初始化时主要加载了velocity.properites中资源相关的配置,初始化RuntimeInstance中的ResourceManager属性,以下罗列几个加载配置:

# ---------------------------------------------------------------------------- # RESOURCE MANAGEMENT # ---------------------------------------------------------------------------- # Allows alternative ResourceManager and ResourceCache implementations # to be plugged in. # ---------------------------------------------------------------------------- resource.manager.class = org.apache.velocity.runtime.resource.ResourceManagerImpl resource.manager.cache.class = org.apache.velocity.runtime.resource.ResourceCacheImpl # ---------------------------------------------------------------------------- # T E M P L A T E L O A D E R S # ---------------------------------------------------------------------------- # # # ---------------------------------------------------------------------------- resource.loader = file file.resource.loader.description = Velocity File Resource Loader file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader file.resource.loader.path = .,/home/madding/vm file.resource.loader.cache = false file.resource.loader.modificationCheckInterval = 2
一块是反射方式初始化 resource manager,一块初始化具体的resourceLoader,本例子中简单修改file.resource.loader.path,添加另一个模板加载位置,把模板在“当前目录”或者/home/madding/vm下,都能被加载到。


说明:

1.ResourceManager的初始化直接关联到的对象是resource对象的创建,经常使用的是template对象的创建,调用的就是ResourceManager的resourceLoader对象进行传教的

2.ResourceManager在初始化resourceLoader根据具体的配置加载,可以初始化多个配置,存在List中,在间接生成Resource对象后,循环调用加载器加载具体的模板。

3.resourceLoader有几个实现方式,一般web工程中使用fileResourceLoader,即根据具体路径加载vm文件。

4.ResourceCache是控制资源加载的缓存设置,根据velocity.properties文件内容加载配置,主要是减少每次加载,缓存实现采用的是LinkedHashMap和ConcurrentHashMap实现。

5.ResourceFactory是构建资源对象的工厂类,该类接口设计不是很合理,不过不影响功能,主要是代码构建Resource对象,每次new出一个Resource对象。在实际调用中,该对象加载后会存在ResourceCache中,之所以要保存这个信息,主要是因为Resource对象在解析时会消耗大量计算(因为要构建ast树,tree),所以保存起来,空间换时间。



至此:RuntimeInstance中

private ResourceManager resourceManager = null;属性初始化了。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值