深色模式
17.5 解耦逻辑的解析
Thymeleaf 解析每个模板对应的解耦逻辑资源的方式可由用户配置。这一解析逻辑由一个扩展点——org.thymeleaf.templateparser.markup.decoupled.IDecoupledTemplateLogicResolver 接口决定,Thymeleaf 为该接口提供了默认实现:StandardDecoupledTemplateLogicResolver(标准解耦模板逻辑解析器)。
这个标准实现的工作机制是什么?
- 首先,它会为模板资源的基准名称(通过模板资源的
ITemplateResource#getBaseName()方法获取)添加前缀和后缀。前缀和后缀均可配置,默认情况下前缀为空字符串,后缀为.th.xml。 - 其次,它会调用模板资源的
ITemplateResource#relative(String relativeLocation)方法,根据拼接后的名称解析对应的相对资源。
可在 TemplateEngine(模板引擎)中轻松配置要使用的 IDecoupledTemplateLogicResolver 具体实现:
java
final StandardDecoupledTemplateLogicResolver decoupledResolver =
new StandardDecoupledTemplateLogicResolver();
decoupledResolver.setPrefix("../viewlogic/");
// 其他配置(如设置后缀)
// decoupledResolver.setSuffix(".custom-th.xml");
...
templateEngine.setDecoupledTemplateLogicResolver(decoupledResolver);关键术语/语法注解
| 英文术语 | 中文译法 | 补充说明 |
|---|---|---|
| Decoupled logic | 解耦逻辑 | Thymeleaf 中将模板结构与业务逻辑分离的机制,逻辑写在独立的 .th.xml 文件中 |
| Template resource | 模板资源 | 指 Thymeleaf 处理的模板文件(如 .html) |
| Base name | 基准名称 | 模板资源的核心名称(如 user.html 的基准名称为 user) |
| ITemplateResource#getBaseName() | 模板资源基准名称获取方法 | 提取模板文件的核心名称,去除文件扩展名 |
| ITemplateResource#relative() | 相对资源解析方法 | 根据相对路径解析对应的解耦逻辑文件 |
| Prefix/Suffix | 前缀/后缀 | 配置解耦逻辑文件的路径前缀和文件后缀 |
核心逻辑解读
- 默认解析规则: 若模板文件为
user.html,其基准名称是user,默认拼接后解耦逻辑文件名为user.th.xml,模板引擎会在user.html同目录下查找该文件。 - 自定义配置示例: 代码中
decoupledResolver.setPrefix("../viewlogic/")表示将解耦逻辑文件的路径前缀设为../viewlogic/,此时user.html对应的解耦逻辑文件会被解析为../viewlogic/user.th.xml。 - 扩展点设计:
IDecoupledTemplateLogicResolver作为扩展接口,用户可自定义实现类,完全掌控解耦逻辑文件的查找、加载规则(如从数据库读取逻辑、自定义路径规则等)。
总结
- 解耦逻辑解析器的核心作用是定位模板对应的解耦逻辑文件,默认实现通过「基准名+前缀+后缀」拼接路径,再解析相对资源;
- 用户可通过配置前缀/后缀,灵活调整解耦逻辑文件的存储路径和命名规则;
- 代码示例展示了如何修改前缀(如将逻辑文件统一放在
../viewlogic/目录下),是实际开发中定制解耦逻辑存储结构的常用方式。
