【Velocity官方指南】使用单例模式还是非单例模式

简介:

从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包中。如果你觉得有任何不妥当或者需要新增的方法,请随时与我们联系提出您的意见,因为这些类设计的初衷就是用来提供给开发人员进行使用。

 

相关文章
|
消息中间件 Kafka
mac 搭建kafka系列教程
mac 搭建kafka系列教程
347 0
mac 搭建kafka系列教程
Mac下查看公网以及内网IP地址
Mac下查看公网以及内网IP地址
714 0
|
SQL 存储 数据管理
一篇文章带你掌握SQLite3基本用法
通过本文的介绍,希望您能深入理解SQLite3的基本用法,并在实际开发中灵活运用这些知识,提升数据管理效率。
1638 5
|
存储 分布式计算 Java
大数据存储技术(3)—— HBase分布式数据库
大数据存储技术(3)—— HBase分布式数据库
5659 0
|
缓存 Java Nacos
图文详述Nacos服务发现源码分析
图文详述Nacos服务发现源码分析
2063 0
图文详述Nacos服务发现源码分析
|
JavaScript
Layui中jquery的使用方式
Layui中jquery的使用方式
480 0
|
存储 NoSQL 分布式数据库
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
446 0
Intellij idea 报错:Error : java 不支持发行版本5
Intellij idea 报错:Error : java 不支持发行版本5
574 0
|
NoSQL Java Redis
Redis 从入门到精通之Redis List数据结构操作命令和示例
使用Jedis和RedisTemplate分别实现Redis列表操作的示例。Redis列表是一个有序的字符串列表,可以在列表的头部或尾部添加、删除元素,还可以截取、查看、修改元素,以及实现阻塞队列等功能。还可以使用其他编程语言的Redis客户端库实现Redis列表操作,如Python的redis模块、Java的Lettuce等。
763 0
Redis 从入门到精通之Redis List数据结构操作命令和示例
|
存储 Linux
Mac安装zookeeper(图文解说详细版)
Mac安装zookeeper(图文解说详细版)
Mac安装zookeeper(图文解说详细版)

热门文章

最新文章