文档章节

VelocityEngine 和Velocity类解析

三毛々
 三毛々
发布于 2013/07/03 09:52
字数 536
阅读 460
收藏 5

VelocityEngine 和Velocity类解析

在我们普通使用velocity的过程中,或者一开始使用velocity做demo的同学,总会对这段代码有印象:

VelocityEngine velocity = new VelocityEngine();
VelocityContext context = new VelocityContext();
context.put("name", "czy");
Template template = velocity.getTemplate("/src/main/resources/test.vm");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
template.merge(context, writer);
writer.flush();
writer.close();

但是阅读源码会发现在org.apache.velocity.app包下,会有velocoty和velocityEngine这两个类,里面的方法大同小异,都是init加setproperty这里设置属性的方法,然后将

VelocityEngine velocity = new VelocityEngine();

这句替换成:

Velocityvelocity = new Velocity();

的时候,依旧可以run成功。why?

为什么作者要建立两个类似的文件?

看过注释,发现org.apache.velocity.app.Velocity.类是一个初始化单例的velocity实例的类。

单例模式是一种简单的设计模式,用最简单的话来说,就是让多个类共享一个实例,让他们能够访问到同样的数据。

对比发现:

Velocity类中使用init方法里是使用了RuntimeSingleton.init();

在RuntimeSingleton类中,使用到的运行实例是静态new出来的。

private static RuntimeInstance ri = new RuntimeInstance();

而在org.apache.velocity.app.VelocityEngine类中,并没有一个单例类来初始化,每次都会使用

private RuntimeInstance ri = new RuntimeInstance()

来创建一个新的运行实例,这样就使得每个velocity引擎都会拥有各自的实例,互不干扰。

从RuntimeSingleton类的注释来看:

/**
* This is the Runtime system for Velocity. It is the
* single access point for all functionality in Velocity.
* It adheres to the mediator pattern and is the only
* structure that developers need to be familiar with
* in order to get Velocity to perform.
*
* The Runtime will also cooperate with external
* systems like Turbine. Runtime properties can
* set and then the Runtime is initialized.
*
* Turbine for example knows where the templates
* are to be loaded from, and where the velocity
* log file should be placed.
*/

velocity和外部合作的项目,例如turbine,就使用的这个类来实例化velocity引擎。
我们在自己写demo 的时候,倒是无所谓使用哪个类,一般也不会产生很多实例,但是在生产环境就要注意,一旦不使用单例,当访问量过大时,会将内存消耗的很多,每一个请求都会产生一个新的velocity实例。

© 著作权归作者所有

共有 人打赏支持
三毛々
粉丝 16
博文 56
码字总数 33881
作品 0
成都
私信 提问
VelocityEngine 和Velocity类解析

在我们 普通使用velocity的过程中,或者一开始使用velocity做demo的同学,总会对这段代码有印象: VelocityEngine velocity = new VelocityEngine(); VelocityContext context = new Veloci...

crazyinsomnia
2010/02/03
832
0
Velocity找不到模板

最近工作中需要用到模板解析的功能,找到了velocity,按照例子做了一遍,没有问题, 于是乎,直接用于工作环境,发现总是报Resource not found 的异常, 检查模板路径,并没有写错什么,但是...

穿越星辰
2010/05/13
295
0
关于VelocityEngineUtils中velocityEngine生成方式的问题

我的velocityEngine的创建方式是: VelocityEngine velocityEngine = new VelocityEngine("velocity.properties"); 在配置文件中配置了input.encoding=utf-8;output.encoding=utf-8; 通过vel......

飞天苹果
2013/05/24
6.5K
1
Apache Velocity实现模板化

1.参考文献 http://www.cnblogs.com/zhuboxingzbx/articles/1225103.html http://www.cnblogs.com/amboyna/archive/2008/06/19/1225105.html 2.概述 2.1.Velocity模板引擎 模板引擎的设计思想......

嗯哼9925
2017/12/20
0
0
Velocity入门指南——第一章 快速入门

1 简介 Velocity是一款基于Java的模板引擎。它允许Web页面设计者引用Java代码中定义的方法。Web设计者能与根据Model-View-Controller (MVC)模型开发Web网站的Java程序员合作,意味着Web页面设...

Leech
2015/12/03
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

linux shell使用代理

export http_proxy=http://proxyAddress:port export http_proxy=http://proxyAddress:port

萌萌哒的小萝卜
30分钟前
1
0
Krpano 插入视频/音频

视频 <hotspot name="videospot" url="%SWFPATH%/plugins/videoplayer.swf" alturl="%SWFPATH%/plugins/videoplayer.js" videourl="%SWFPATH%/image/video.flv|%SWFPATH%/......

华山猛男
33分钟前
2
0
el-select使用方法及遇到数据回显的坑

<el-select v-model="temp.lang" class="filter-item" placeholder="Please select"> <el-option v-for="item in langs" :key="item.value" :label="item.label" :value="item.value"/> </el......

BraveLN
35分钟前
1
0
百度贴吧自动签到

实现百度贴吧自动签到功能 1.编写签到Python脚本 源码地址:https://github.com/peizhouyu/tieba-sign.git #! python3# -*- coding:utf-8 -*-import requestsimport reimport hash...

MrPei
40分钟前
1
0
windows nginx

之前一直是在linux上使用nginx,今天百度了一下,发现原来nginx在windows也有软件。 最近在研究jeecg-boot,现在越来越多的框架开始采用前后分离的模式了,看来也是时候跟进了。 nginx: dow...

miaojiangmin
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部