在Velocity1.2版本以后,开发者现在又两种选择来使用Velocity引擎,单例模型(singleton model)和单独实例模型(separate instance model)。这是相同的核心代码的2种使用方式,他们都提供了简单地将Velocity集成到你的Java应用中。

单一实例模式(Singleton Model)

这是一个传统模式,Velocity引擎在JVM中(或者是一个Web应用)只有一个共享实例,它可以非常方便的允许局部配置并且共享资源。举一个例子,在使用Servlet 2.2+兼容的Web应用中,每个Web应用程序都可以有自己的运行实例,这就是一个非常合适的模型。

 import org.apache.velocity.app.Velocity;
import org.apache.velocity.Template; ... /*
* Configure the engine - as an example, we are using
* ourselves as the logger - see logging examples
*/ Velocity.setProperty(
Velocity.RUNTIME_LOG_LOGSYSTEM, this); /*
* now initialize the engine
*/ Velocity.init(); ... Template t = Velocity.getTemplate("foo.vm");

单独实例模型(Separate Instance)

1.2版本新出来的,单独实例模式允许你创建、配置并且在JVM(或者Web应用)上,Velocity实例的数量你想要多少就可以使用多少。当你希望支持分散的配置的时候这个是非常有用的,比如在同一个应用的模版路径,日志等等。为了使用单独实例,将使用org.apache.velocity.app.VelocityEngine类。举个例子,和上面的单例例子对应:

 import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template; ... /*
* create a new instance of the engine
*/ VelocityEngine ve = new VelocityEngine(); /*
* configure the engine. In this case, we are using
* ourselves as a logger (see logging examples..)
*/ ve.setProperty(
VelocityEngine.RUNTIME_LOG_LOGSYSTEM, this); /*
* initialize the engine
*/ ve.init(); ... Template t = ve.getTemplate("foo.vm");

就像你看到的,这个是非常简单明了的。在使用Velocity单一实例还是单独实例的需求上,除了一些简单语法上的变化,在应用和模版中没有其他高级别数据结构的变化。

作为一个程序员,如果使用单一实例的话,使用Velocity的内部类org.apache.velocity.app.Velocity,如果你使用非单一实例模型的话则使用org.apache.velocity.app.VelocityEngine。

在任何时候需要应用使用org.apache.velocity.runtime包内部的Runtime,RuntimeConstants,RuntimeSingleton或者RuntimeInstance类,因为这些是供内部使用,所以可能会随时间而改变。就像上面提到的,这些位于org.apache.velocity.runtime包里的类,也是Velocity和VelocityEngine的类。如果当需要这些类的时候无法找到,不要犹豫提议变化 - 这些类都是为应用开发者提供的。

Velocity - 单例还是非单例的更多相关文章

  1. Java---设计模块(单例的变形)(多例)

    设计模式1--单例变形(多例) ★ 缓存在单例中的使用 缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放 ...

  2. spring自动注入是单例还是多例?单例如何注入多例?

       单例和多例的区别 :   单例多例需要搞明白这些问题:      1. 什么是单例多例:      2. 如何产生单例多例:      3. 为什么要用单例多例      4. 什么时候用单例, ...

  3. Java单例设计模式和多例设计模式

    单例设计模型 教学视频链接:https://edu.aliyun.com/course/1011 1,private不可以在类外部访问,但可以在内部访问 2,此时Singleton类内部的instan ...

  4. 2单表CRUD综合样例开发教程

    东软集团股份有限公司 基础软件事业部 单表CRUD综合样例开发教程 东软机密 tui 更改履历 版本号 更改时间 更改的 图表和章节号 状态 更改简要描述 更改申 请编号 更改人 批准人 V1.0 2 ...

  5. HTML 5 服务器发送事件、Input 类型、表单元素、表单属性

    HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新. Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获取来自服务器 ...

  6. uber司机 如何提高评分、接单率、成单率?

    接单率/成单率的解释 接单率计算方法为:成功接单的订单数 除以 系统派单的订单数. 成单率计算方法为:成功完成的订单数 除以 系统派单的订单数. 滴滴快车单单2.5倍,注册地址:http://www. ...

  7. vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)

    第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...

  8. 第四章:Django表单 - 1:使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素: <form action="/your-name/" method="po ...

  9. ios UITapGestureRecognizer 单指单击、单指多击、多指单击、多指多击事件操作

    转自:http://blog.csdn.net/longzs/article/details/7457108 在ios开发中,需用到对于手指的不同操作,以手指点击为例:分为单指单击.单指多击.多指单击 ...

随机推荐

  1. MyBatis对不同数据库的主键生成策略

    本文转自:http://289972458.iteye.com/blog/1001851  http://hi.baidu.com/zim_it/blog/item/8a2bd11205f5b56ec ...

  2. python学习笔记25(文件管理 os包)

    os包我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数.如果你对linux基本操作了解的话,下面的一些os方法应该会很熟悉的,因为基本和li ...

  3. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  4. Contest2037 - CSU Monthly 2013 Oct (problem B :Scoop water)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=1 [题解]:卡特兰数取模 h(n) = h(n-1)*(4*n-2)/( ...

  5. js原生代码编写一个鼠标在页面移动坐标的检测功能,兼容各大浏览器

    function mousePosition(e) {     //IE9以上的浏览器获取     if (e.pageX || e.pageY) {         return {         ...

  6. 极客范:如何使用 Cloud Insight 来监控闭路电视?

    最近新上线支持 Windows 系统及其组件 监控功能的 Cloud Insight,在系统监控领域基本囊括了对所有主流和部分非主流平台的支持.但是这还不够,Cloud Insight 可不仅仅是一个 ...

  7. linux后台执行命令&

    当在前台运行某个作业时,终端被该作业占据:而在后台运行作业时,它不会占据终端.可以使用&命令把作业放到后台执行. 如:30 2 * * * /data/app/scripts/hotbacku ...

  8. eclipse代码自动提示功能设置

    一 般默认情况下,Eclipse ,MyEclipse的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...

  9. java thread类和runable

    java thread 类其实和其他类是一样的.有自己的属性和方法.以及有一个重写的run方法 不同的是:必须重写run()方法. run()方法是线程thread启动后cpu调用运行的程序代码. r ...

  10. BZOJ 2553 禁忌

    首先我们要考虑给定一个串,如何将他划分,使得他有最多的禁忌串 我们只需要按里面出现的禁忌串们的出现的右端点排序然后贪心就可以啦 我们建出AC自动机,在AC自动机等价于走到一个包含禁忌串的节点就划分出一 ...