zoukankan      html  css  js  c++  java
  • VelocityEngine 和Velocity类解析

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

    Code
    但是阅读源码会发现在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类的注释来看:

    Code

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

  • 相关阅读:
    深入protoBuf
    Golang数据库操纵对IN语句的支持
    golang几种常用配置文件使用方法总结(yaml、toml、json、xml、ini)
    golang实现rabbitmq消息队列失败尝试
    Trie性能分析之敏感词过滤golang
    Go语言cookie的基本操作
    微信二维码添加logo
    gin框架中间件
    gin入门-1
    2017-06-28(passwd 主要组与附属组 gpasswd newgrp groups)
  • 原文地址:https://www.cnblogs.com/xiziyin/p/1608264.html
Copyright © 2011-2022 走看看