velocity源码分析:velocity初始化
velocity初始化类结构图:
描述:
1.RuntimeConstants定义常量,主要是velociyt初始化的配置项的key
2.四个方法实现该接口主要是共用公共定义的常量,发现很多开源框架喜欢继承公共常量定义的接口来公用变量。
3.RuntimeInstance类是velocity初始化的具体实现,里面定义了初始的顺序和步骤,具体接下来分析
4.RuntimeSingleton是RuntimeInstance的包装类,做了当例和适配
5.velcoity类又是RuntimeInstance的适配器
6.VelocityEngine是组合了RuntimeInstance,在初始化时调用RuntimeInstance.init(),可以多例
7.velocity解析器要当例或者多例取决于应用场景,不过大部分应用场景会采用多例,即调用VelocityEngine作框架融合
8.先初始化默认配置项,再去根据overridingProperties是否有值,去覆盖默认配置
具体:
RuntimeServices:读取配置
org.apache.velocity.app.Velocity初始化细节分析:init():
initializeProperties():读取velcoity自带的velocity.properties配置文件
org/apache/velocity/runtime/defaults/velocity.properties
initializeLog(): 初始化velocity日志系统,
配置项:runtime.log.logsystem.class
加载配置文件中的定义的
initializeResourceManager(): 初始化velocity的资源管理器,
配置项:resource.manager.class
初始化选项定义的资源加载类,
默认初始化两个resourceLoader:FileResourceLoader、StringResourceLoader
配置项:resource.manager.cache.class
初始化选项定义的资源缓存类,控制全局资源缓存
initializeDirectives():加载velocity指令配置,
org/apache/velocity/runtime/defaults/directive.properties
initializeEventHandlers():加载事件处理类,
配置项:eventhandler.referenceinsertion.class
配置项:eventhandler.nullset.class 空值设置处理
配置项:eventhandler.methodexception.class 异常处理
配置项:eventhandler.include.class
配置项:eventhandler.invalidreferences.class
initializeParserPool():加载解析池
配置项:parser.pool.class
initializeIntrospection():
配置项:runtime.introspector.uberspect
initializeEvaluateScopeSettings():
vmFactory.initVelocimacro():初始化宏工厂
配置项:velocimacro.library