在设计MeteorTL的TemplateLoader时,借鉴了下FreeMarker,
FreeMarker的TemplateLoader:
public interface TemplateLoader {
public Object findTemplateSource(String name) throws IOException;
public long getLastModified(Object templateSource);
public Reader getReader(Object templateSource, String encoding) throws IOException;
public void closeTemplateSource(Object templateSource) throws IOException;
}
初读此接口很费解,这是一个留给扩展者的SPI,但却让扩展者要看完那长篇的注释才能明白那个Object是干什么的。
TemplateLoader的第一目标是要通过模板name拿到Reader,
最初的想法肯定是:
public interface TemplateLoader {
public Reader getReader(String name, String encoding) throws IOException;
}
但实现时,会发现Reader无法持有一些meta数据,如:用于热加载时比较是否更新用的lastModified时间等。
所以freemarker才会有上面的写法,用一个Object(大部分时候是File)传递,也就是 findTemplateSource(String name) 的返回值 Object templateSource 会被框架(接口调用者)通过参数回传给下面的三个函数。以至于此接口的契约依赖于框架的具体实现(即所有此接口的调用者,都应该遵守回传templateSource,而这些都是文档约束的)。
重构如下:
import java.io.IOException;
public interface TemplateLoader {
public TemplateSource getTemplateSource(String name) throws IOException;
}
import java.io.IOException;
import java.io.Reader;
public interface TemplateSource {
public static final long UNKOWN_TIME = -1;
public long getLastModifiedTime();
public Reader getReader(String encoding) throws IOException;
public void close() throws IOException;
}
分享到:
相关推荐
FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...
这个“FreeMarker设计指南.ppt”文件很可能是关于如何有效地使用FreeMarker进行模板设计和编程的一份详细教程。以下是FreeMarker的一些核心知识点和相关概念: 1. **模板语言**:FreeMarker是基于文本的模板语言,...
本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...
FreeMarker 是一个强大的模板引擎,常用于Web应用中的视图层,特别是在Java环境中与Spring MVC等框架配合使用。本设计指南将深入探讨FreeMarker的核心概念、语法、最佳实践以及常见应用场景,帮助开发者更好地理解和...
FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,通过模板显示准备的数据。 -...
Freemarker是一个基于模板的开源模板语言,它与Java代码分离,使得开发者可以专注于业务逻辑,而设计师则可以专注于页面设计。它不依赖于任何特定的Web框架,可以在各种Java应用中使用。 2. **模板语法** ...
Freemarker是一个强大的模板引擎,主要用于生成动态HTML、XML或其他文本格式的页面。...在实际应用中,开发者需要结合Java后端框架(如Spring MVC)和其他相关技术,充分利用Freemarker的功能来构建动态网站和应用。
这种情况下,设计者可以在HTML或其他输出文本中插入特定的FreeMarker指令,这些指令将在最终输出给用户时被适当的数据替换。 - **示例**: 以下是一个简单的HTML模板示例,展示了如何使用FreeMarker指令: ```html...
3. **模板设计**: Freemarker强调模板应与业务逻辑分离,使得设计师可以专注于布局和样式,而开发者处理数据和逻辑。这种分离使得维护和更新变得更加容易。 4. **缓存机制**: 2.3.28版本可能包含了对模板编译后的...
- **分离关注点**:Freemarker遵循MVC设计模式,负责视图部分,将业务逻辑和表现层分开,使代码更易于维护。 2. **Freemarker语法** - **变量**:`${...}` 用于输出变量的值,如 `${name}` 将输出与`name`键对应...
在本场景中,我们探讨的是如何利用Freemarker来生成Microsoft Word(.doc)文档。这个方案主要适用于需要根据预定义模板动态生成报告、合同等Word文档的场合。 一、Freemarker基础 Freemarker是一个基于模板的语言...
5. **模板设计**:Freemarker模板设计是关键步骤,它定义了Word文档的结构和内容。在模板中,可以使用Freemarker的语法来控制文本、段落和图片的布局。图片的插入通常会涉及`<#assign>`指令来定义变量,以及`<img>`...
在这个"freemarker-2.3.22"的压缩包中,包含了Freemarker 2.3.22版本的相关资源,有助于我们深入了解和使用这个库。 首先,`README.txt`通常包含项目的基本信息、安装指南和快速入门等内容。在这个版本中,它可能...
FreeMarker 设计指南 FreeMarker 是一个模板引擎,用于生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。...FreeMarker 通过模板和数据模型来生成输出,解决了在 Web 页面中显示的信息在设计页面时是无效的问题。
在IT行业中,可视化布局工具和模板引擎是提升开发效率、简化网页设计的重要手段。本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关...
10. **模板设计模式**:FreeMarker鼓励采用MVC模式,将业务逻辑与视图分离,使得模板更专注于呈现,提高了代码的可维护性和可复用性。 通过阅读和理解FreeMarker 2.3.23的官方中文文档,开发者能够熟练掌握...
FreeMarker设计指南(完整整理)是我们学习的好帮手!
在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...
标题“velocity和freemarker的比较”涉及到的是两个在Java Web开发中常用的模板引擎——Velocity和FreeMarker。它们都是用于将静态模板与动态数据结合,生成HTML或其他类型的文本输出,常用于MVC(模型-视图-控制器...