博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Velocity官方指南】使用单例模式还是非单例模式
阅读量:7166 次
发布时间:2019-06-29

本文共 2045 字,大约阅读时间需要 6 分钟。

从Velocity 1.2以后的版本,开发者对于Velocity引擎的使用有了两种方式,单例模型(Singleton)以及多个独立实例模型。Velocity的核心部分也采用了这两种模型,目的是为了让Velocity可以更容易与你的JAVA应用相集成。

单例模式(Singleton):

这是一个遗留(Legacy)模式,在这种模式下只有一个Velocity的引擎在JVM(或者是WEB容器,这取决于你的环境)中会被实例化,同时被全部程序所共享。这对本地化的配置以及可被分享的其他资源来说是十分方便的。举个例子,在Servlet 2.2以上的版本中,将Velocity实例化并且采用单例模型提供给一个web程序使用是一种十分值得推荐的模式,这样web应用中的servlet可以共享资源,比如:模板(templates),日志工具(logger)等等。单例模式可以通过如下的类进行访问: org.apache.velocity.app.Velocity,下文中会给出一个具体的例子

01 import org.apache.velocity.app.Velocity;
02 import org.apache.velocity.Template;
03 ...
04 /*
05  
06  *  Configure the engine - as an example, we are using
07  
08  *  ourselves as the logger - see logging examples
09  
10  */
11 Velocity.setProperty(
12     Velocity.RUNTIME_LOG_LOGSYSTEM, this);
13 /*
14  *  now initialize the engine
15  */
16 Velocity.init();
17 ...
18 Template t = Velocity.getTemplate("foo.vm");
19   

拆分实例(Separate Instance)

作为1.2版本后的新功能,你可以创建不同的实例,你可以在JVM(或者Web 容器)中随心所欲的配置你想要的Velocity实例的数量。在你想提供多种不同的配置时,例如:模板字典(template directories),不同的日志工具(logger)将会非常有用。如果你想使用拆分实例,可以用过类: org.apache.velocity.app.VelocityEngine。如上文,这里我们也将提供一个例子

01 </pre>
02 <pre>import org.apache.velocity.app.VelocityEngine;
03 import org.apache.velocity.Template;
04 ...
05 /*
06  *  create a new instance of the engine
07  */
08 VelocityEngine ve = new VelocityEngine();
09 /*
10  *  configure the engine.  In this case, we are using
11  *  ourselves as a logger (see logging examples..)
12  */
13 ve.setProperty(
14     VelocityEngine.RUNTIME_LOG_LOGSYSTEM, this);
15 /*
16  *  initialize the engine
17  */
18 ve.init();
19 ...
20 Template t = ve.getTemplate("foo.vm");</pre>
21 <pre> 

如你所见,他们的使用非常的简单明了。除了一些细微的语义上的区别外,使用单例或者可拆分实例对你的上层应用或者模板来说并没有太大的区别.

作为一个程序员,如果你想采用单例模式,需要访问org.apache.velocity.app.Velocity这个类,如果采用非单例模式(拆分实例)的话只需访问类 org.apache.velocity.app.VelocityEngine

在任何时候请不要在程序中使用内置的 在包org.apache.velocity.runtime 下的Runtime, RuntimeConstants, RuntimeSingleton or RuntimeInstance 类,因为这些类的设计仅仅是供velocity内部使用,并且未来可能会被修改。请按我们前文描述的,开发人员所需使用的类文件在 org.apache.velocity.app包中。如果你觉得有任何不妥当或者需要新增的方法,请随时与我们联系提出您的意见,因为这些类设计的初衷就是用来提供给开发人员进行使用。

 

  • 转载自 
你可能感兴趣的文章
CCNA2.0笔记_OSPF v3
查看>>
测试工程师应该知道的数据库基本操作(增删改查)
查看>>
求二叉树中的节点个数、求二叉树的深度(高度)
查看>>
看到一些前端面试题没答案,自己做了一下如果有错请指出
查看>>
Selenium2(WebDriver)总结(四)---基本元素操作
查看>>
应用程序框架实战三十五:服务概述
查看>>
C#中一道关于多线程的编程题
查看>>
附加数据库 对于 服务器“00-PC”失败
查看>>
AgileEAS.NET SOA中间件平台更新日志 2015-04-28
查看>>
系统共享内存的修改(ORA-27102: out of memory)
查看>>
设备树(device tree)学习笔记
查看>>
hdu 3518 (后缀数组)
查看>>
C#类的一些概念
查看>>
bzoj 4001 [TJOI2015]概率论 数学
查看>>
基于.net开发chrome核心浏览器【二】
查看>>
LeetCode - Isomorphic Strings
查看>>
android UI 仿 win 8 模块化 标题,并实现 可长按拖动交换图片位置、可点击,且伴随动画特效...
查看>>
Maven发布工程到公共库
查看>>
@RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别...
查看>>
MSMQ实现自定义序列化存储
查看>>