This commit is contained in:
Looly 2023-04-24 10:29:19 +08:00
parent e16c734756
commit 9e49100f03
22 changed files with 113 additions and 89 deletions

View File

@ -0,0 +1,18 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* JDK方式切面实现基于{@link java.lang.reflect.Proxy}封装
*
* @author looly
*/
package org.dromara.hutool.extra.aop.engine.jdk;

View File

@ -0,0 +1,19 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* 切面实现引擎
*
* @author looly
*
*/
package org.dromara.hutool.extra.aop.engine;

View File

@ -0,0 +1,19 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* Spring-cglib切面实现
*
* @author looly
*
*/
package org.dromara.hutool.extra.aop.engine.spring;

View File

@ -17,6 +17,7 @@ import java.nio.charset.Charset;
import java.util.Objects; import java.util.Objects;
import org.dromara.hutool.core.util.CharsetUtil; import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
/** /**
* 模板配置 * 模板配置

View File

@ -10,19 +10,17 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.extra.template.engine; package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.lang.Singleton; import org.dromara.hutool.core.lang.Singleton;
import org.dromara.hutool.core.reflect.ConstructorUtil; import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.spi.SpiUtil; import org.dromara.hutool.core.spi.SpiUtil;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.TemplateEngine;
import org.dromara.hutool.extra.template.TemplateException;
import org.dromara.hutool.log.StaticLog; import org.dromara.hutool.log.StaticLog;
/** /**
* 简单模板工厂用于根据用户引入的模板引擎jar自动创建对应的模板引擎对象 * 简单模板殷勤工厂用于根据用户引入的模板引擎jar自动创建对应的模板引擎对象
* *
* @author looly * @author looly
*/ */
@ -34,8 +32,8 @@ public class TemplateFactory {
* *
* @return 单例的TemplateEngine * @return 单例的TemplateEngine
*/ */
public static TemplateEngine get(){ public static TemplateEngine getEngine() {
return Singleton.get(TemplateEngine.class.getName(), TemplateFactory::of); return Singleton.get(TemplateEngine.class.getName(), TemplateFactory::createEngine);
} }
/** /**
@ -45,8 +43,8 @@ public class TemplateFactory {
* @return {@link TemplateEngine} * @return {@link TemplateEngine}
* @since 5.3.3 * @since 5.3.3
*/ */
public static TemplateEngine of() { public static TemplateEngine createEngine() {
return of(new TemplateConfig()); return createEngine(new TemplateConfig());
} }
/** /**
@ -56,7 +54,7 @@ public class TemplateFactory {
* @param config 模板配置包括编码模板文件path等信息 * @param config 模板配置包括编码模板文件path等信息
* @return {@link TemplateEngine} * @return {@link TemplateEngine}
*/ */
public static TemplateEngine of(final TemplateConfig config) { public static TemplateEngine createEngine(final TemplateConfig config) {
final TemplateEngine engine = doCreate(config); final TemplateEngine engine = doCreate(config);
StaticLog.debug("Use [{}] Engine As Default.", StrUtil.removeSuffix(engine.getClass().getSimpleName(), "Engine")); StaticLog.debug("Use [{}] Engine As Default.", StrUtil.removeSuffix(engine.getClass().getSimpleName(), "Engine"));
return engine; return engine;
@ -72,15 +70,17 @@ public class TemplateFactory {
private static TemplateEngine doCreate(final TemplateConfig config) { private static TemplateEngine doCreate(final TemplateConfig config) {
final Class<? extends TemplateEngine> customEngineClass = config.getCustomEngine(); final Class<? extends TemplateEngine> customEngineClass = config.getCustomEngine();
final TemplateEngine engine; final TemplateEngine engine;
if(null != customEngineClass){ if (null != customEngineClass) {
// 自定义模板引擎
engine = ConstructorUtil.newInstance(customEngineClass); engine = ConstructorUtil.newInstance(customEngineClass);
}else{ } else {
// SPI引擎查找
engine = SpiUtil.loadFirstAvailable(TemplateEngine.class); engine = SpiUtil.loadFirstAvailable(TemplateEngine.class);
} }
if(null != engine){ if (null != engine) {
return engine.init(config); return engine.init(config);
} }
throw new TemplateException("No template found !Please add one of template jar to your project !"); throw new TemplateException("No template found! Please add one of template jar to your project !");
} }
} }

View File

@ -1,46 +0,0 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.extra.template;
import org.dromara.hutool.extra.template.engine.TemplateFactory;
/**
* 模板工具类
*
* @author looly
* @since 4.1.0
*/
public class TemplateUtil {
/**
* 根据用户引入的模板引擎jar自动创建对应的模板引擎对象使用默认配置<br>
* 推荐创建的引擎单例使用此方法每次调用会返回新的引擎
*
* @return {@link TemplateEngine}
* @since 4.1.11
*/
public static TemplateEngine createEngine() {
return TemplateFactory.of();
}
/**
* 根据用户引入的模板引擎jar自动创建对应的模板引擎对象<br>
* 推荐创建的引擎单例使用此方法每次调用会返回新的引擎
*
* @param config 模板配置包括编码模板文件path等信息
* @return {@link TemplateEngine}
*/
public static TemplateEngine createEngine(final TemplateConfig config) {
return TemplateFactory.of(config);
}
}

View File

@ -10,7 +10,10 @@
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
package org.dromara.hutool.extra.template; package org.dromara.hutool.extra.template.engine;
import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig;
/** /**
* 引擎接口通过实现此接口从而使用对应的模板引擎 * 引擎接口通过实现此接口从而使用对应的模板引擎

View File

@ -15,7 +15,7 @@ package org.dromara.hutool.extra.template.engine.beetl;
import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.beetl.core.Configuration; import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate; import org.beetl.core.GroupTemplate;
import org.beetl.core.ResourceLoader; import org.beetl.core.ResourceLoader;

View File

@ -18,7 +18,7 @@ import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateConfig.ResourceMode; import org.dromara.hutool.extra.template.TemplateConfig.ResourceMode;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import com.jfinal.template.source.FileSourceFactory; import com.jfinal.template.source.FileSourceFactory;
import java.io.File; import java.io.File;

View File

@ -17,7 +17,7 @@ import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.TemplateException; import org.dromara.hutool.extra.template.TemplateException;
import freemarker.cache.ClassTemplateLoader; import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.FileTemplateLoader; import freemarker.cache.FileTemplateLoader;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.extra.template.engine.jetbrick;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import jetbrick.template.JetEngine; import jetbrick.template.JetEngine;
import java.util.Properties; import java.util.Properties;

View File

@ -17,7 +17,7 @@ import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import io.pebbletemplates.pebble.PebbleEngine; import io.pebbletemplates.pebble.PebbleEngine;
import io.pebbletemplates.pebble.loader.*; import io.pebbletemplates.pebble.loader.*;
import org.beetl.core.GroupTemplate; import org.beetl.core.GroupTemplate;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.extra.template.engine.rythm;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import java.util.Properties; import java.util.Properties;

View File

@ -23,7 +23,7 @@ import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
/** /**
* Thymeleaf模板引擎实现 * Thymeleaf模板引擎实现

View File

@ -16,7 +16,7 @@ import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.apache.velocity.app.Velocity; import org.apache.velocity.app.Velocity;
/** /**

View File

@ -16,7 +16,7 @@ import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.extra.template.Template; import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig; import org.dromara.hutool.extra.template.TemplateConfig;
import org.dromara.hutool.extra.template.TemplateEngine; import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.TemplateException; import org.dromara.hutool.extra.template.TemplateException;
import org.febit.wit.Engine; import org.febit.wit.Engine;
import org.febit.wit.exceptions.ResourceNotFoundException; import org.febit.wit.exceptions.ResourceNotFoundException;

View File

@ -12,6 +12,10 @@
/** /**
* 第三方模板引擎封装提供统一的接口用于适配第三方模板引擎 * 第三方模板引擎封装提供统一的接口用于适配第三方模板引擎
* <pre>
*
* TemplateFactory = TemplateEngine = Template = 内容
* </pre>
* *
* @author looly * @author looly
* *

View File

@ -10,6 +10,8 @@
# See the Mulan PSL v2 for more details. # See the Mulan PSL v2 for more details.
# #
# 实现org.dromara.hutool.extra.template.engine.TemplateEngine
org.dromara.hutool.extra.template.engine.beetl.BeetlEngine org.dromara.hutool.extra.template.engine.beetl.BeetlEngine
org.dromara.hutool.extra.template.engine.freemarker.FreemarkerEngine org.dromara.hutool.extra.template.engine.freemarker.FreemarkerEngine
org.dromara.hutool.extra.template.engine.velocity.VelocityEngine org.dromara.hutool.extra.template.engine.velocity.VelocityEngine

View File

@ -2,6 +2,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.engine.jetbrick.JetbrickEngine; import org.dromara.hutool.extra.template.engine.jetbrick.JetbrickEngine;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -13,7 +14,7 @@ public class JetbrickTest {
//classpath模板 //classpath模板
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH) final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH)
.setCustomEngine(JetbrickEngine.class); .setCustomEngine(JetbrickEngine.class);
final TemplateEngine engine = TemplateUtil.createEngine(config); final TemplateEngine engine = TemplateFactory.createEngine(config);
final Template template = engine.getTemplate("jetbrick_test.jetx"); final Template template = engine.getTemplate("jetbrick_test.jetx");
final String result = template.render(Dict.of().set("name", "hutool")); final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", StrUtil.trim(result)); Assertions.assertEquals("你好,hutool", StrUtil.trim(result));
@ -24,7 +25,7 @@ public class JetbrickTest {
// 字符串模板 // 字符串模板
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.STRING) final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.STRING)
.setCustomEngine(JetbrickEngine.class); .setCustomEngine(JetbrickEngine.class);
final TemplateEngine engine = TemplateUtil.createEngine(config); final TemplateEngine engine = TemplateFactory.createEngine(config);
final Template template = engine.getTemplate("hello,${name}"); final Template template = engine.getTemplate("hello,${name}");
final String result = template.render(Dict.of().set("name", "hutool")); final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result)); Assertions.assertEquals("hello,hutool", StrUtil.trim(result));

View File

@ -3,6 +3,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.TemplateConfig.ResourceMode; import org.dromara.hutool.extra.template.TemplateConfig.ResourceMode;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.engine.beetl.BeetlEngine; import org.dromara.hutool.extra.template.engine.beetl.BeetlEngine;
import org.dromara.hutool.extra.template.engine.enjoy.EnjoyEngine; import org.dromara.hutool.extra.template.engine.enjoy.EnjoyEngine;
import org.dromara.hutool.extra.template.engine.freemarker.FreemarkerEngine; import org.dromara.hutool.extra.template.engine.freemarker.FreemarkerEngine;
@ -25,18 +26,18 @@ import java.util.Map;
* @author looly * @author looly
* *
*/ */
public class TemplateUtilTest { public class TemplateFactoryTest {
@Test @Test
public void createEngineTest() { public void createEngineTest() {
// 字符串模板, 默认模板引擎此处为Beetl // 字符串模板, 默认模板引擎此处为Beetl
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig()); TemplateEngine engine = TemplateFactory.createEngine(new TemplateConfig());
final Template template = engine.getTemplate("hello,${name}"); final Template template = engine.getTemplate("hello,${name}");
final String result = template.render(Dict.of().set("name", "hutool")); final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result); Assertions.assertEquals("hello,hutool", result);
// classpath中获取模板 // classpath中获取模板
engine = TemplateUtil.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH)); engine = TemplateFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
final Template template2 = engine.getTemplate("beetl_test.btl"); final Template template2 = engine.getTemplate("beetl_test.btl");
final String result2 = template2.render(Dict.of().set("name", "hutool")); final String result2 = template2.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result2); Assertions.assertEquals("hello,hutool", result2);
@ -60,7 +61,7 @@ public class TemplateUtilTest {
@Test @Test
public void rythmEngineTest() { public void rythmEngineTest() {
// 字符串模板 // 字符串模板
final TemplateEngine engine = TemplateUtil.createEngine( final TemplateEngine engine = TemplateFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(RythmEngine.class)); new TemplateConfig("templates").setCustomEngine(RythmEngine.class));
final Template template = engine.getTemplate("hello,@name"); final Template template = engine.getTemplate("hello,@name");
final String result = template.render(Dict.of().set("name", "hutool")); final String result = template.render(Dict.of().set("name", "hutool"));
@ -75,14 +76,14 @@ public class TemplateUtilTest {
@Test @Test
public void freemarkerEngineTest() { public void freemarkerEngineTest() {
// 字符串模板 // 字符串模板
TemplateEngine engine = TemplateUtil.createEngine( TemplateEngine engine = TemplateFactory.createEngine(
new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(FreemarkerEngine.class)); new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(FreemarkerEngine.class));
Template template = engine.getTemplate("hello,${name}"); Template template = engine.getTemplate("hello,${name}");
String result = template.render(Dict.of().set("name", "hutool")); String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result); Assertions.assertEquals("hello,hutool", result);
//ClassPath模板 //ClassPath模板
engine = TemplateUtil.createEngine( engine = TemplateFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(FreemarkerEngine.class)); new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(FreemarkerEngine.class));
template = engine.getTemplate("freemarker_test.ftl"); template = engine.getTemplate("freemarker_test.ftl");
result = template.render(Dict.of().set("name", "hutool")); result = template.render(Dict.of().set("name", "hutool"));
@ -92,14 +93,14 @@ public class TemplateUtilTest {
@Test @Test
public void velocityEngineTest() { public void velocityEngineTest() {
// 字符串模板 // 字符串模板
TemplateEngine engine = TemplateUtil.createEngine( TemplateEngine engine = TemplateFactory.createEngine(
new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(VelocityEngine.class)); new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(VelocityEngine.class));
Template template = engine.getTemplate("你好,$name"); Template template = engine.getTemplate("你好,$name");
String result = template.render(Dict.of().set("name", "hutool")); String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", result); Assertions.assertEquals("你好,hutool", result);
//ClassPath模板 //ClassPath模板
engine = TemplateUtil.createEngine( engine = TemplateFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(VelocityEngine.class)); new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(VelocityEngine.class));
template = engine.getTemplate("velocity_test.vtl"); template = engine.getTemplate("velocity_test.vtl");
result = template.render(Dict.of().set("name", "hutool")); result = template.render(Dict.of().set("name", "hutool"));
@ -113,7 +114,7 @@ public class TemplateUtilTest {
@Test @Test
public void enjoyEngineTest() { public void enjoyEngineTest() {
// 字符串模板 // 字符串模板
TemplateEngine engine = TemplateUtil.createEngine( TemplateEngine engine = TemplateFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(EnjoyEngine.class)); new TemplateConfig("templates").setCustomEngine(EnjoyEngine.class));
Template template = engine.getTemplate("#(x + 123)"); Template template = engine.getTemplate("#(x + 123)");
String result = template.render(Dict.of().set("x", 1)); String result = template.render(Dict.of().set("x", 1));
@ -130,14 +131,14 @@ public class TemplateUtilTest {
@Test @Test
public void thymeleafEngineTest() { public void thymeleafEngineTest() {
// 字符串模板 // 字符串模板
TemplateEngine engine = TemplateUtil.createEngine( TemplateEngine engine = TemplateFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(ThymeleafEngine.class)); new TemplateConfig("templates").setCustomEngine(ThymeleafEngine.class));
Template template = engine.getTemplate("<h3 th:text=\"${message}\"></h3>"); Template template = engine.getTemplate("<h3 th:text=\"${message}\"></h3>");
String result = template.render(Dict.of().set("message", "Hutool")); String result = template.render(Dict.of().set("message", "Hutool"));
Assertions.assertEquals("<h3>Hutool</h3>", result); Assertions.assertEquals("<h3>Hutool</h3>", result);
//ClassPath模板 //ClassPath模板
engine = TemplateUtil.createEngine( engine = TemplateFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(ThymeleafEngine.class)); new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(ThymeleafEngine.class));
template = engine.getTemplate("thymeleaf_test.ttl"); template = engine.getTemplate("thymeleaf_test.ttl");
result = template.render(Dict.of().set("message", "Hutool")); result = template.render(Dict.of().set("message", "Hutool"));
@ -150,13 +151,13 @@ public class TemplateUtilTest {
@Test @Test
public void pebbleEngineTest() { public void pebbleEngineTest() {
// 字符串模板 // 字符串模板
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates").setCustomEngine(PebbleTemplateEngine.class)); TemplateEngine engine = TemplateFactory.createEngine(new TemplateConfig("templates").setCustomEngine(PebbleTemplateEngine.class));
Template template = engine.getTemplate("<h3>{{ message }}</h3>"); Template template = engine.getTemplate("<h3>{{ message }}</h3>");
String result = template.render(Dict.of().set("message", "Hutool")); String result = template.render(Dict.of().set("message", "Hutool"));
Assertions.assertEquals("<h3>Hutool</h3>", result); Assertions.assertEquals("<h3>Hutool</h3>", result);
//ClassPath模板 //ClassPath模板
engine = TemplateUtil.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(PebbleTemplateEngine.class)); engine = TemplateFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(PebbleTemplateEngine.class));
template = engine.getTemplate("pebble_test.peb"); template = engine.getTemplate("pebble_test.peb");
result = template.render(Dict.of().set("name", "Hutool")); result = template.render(Dict.of().set("name", "Hutool"));
Assertions.assertEquals("hello, Hutool", result); Assertions.assertEquals("hello, Hutool", result);
@ -179,7 +180,7 @@ public class TemplateUtilTest {
//classpath模板 //classpath模板
TemplateConfig config = new TemplateConfig("templates", ResourceMode.CLASSPATH) TemplateConfig config = new TemplateConfig("templates", ResourceMode.CLASSPATH)
.setCustomEngine(WitEngine.class); .setCustomEngine(WitEngine.class);
TemplateEngine engine = TemplateUtil.createEngine(config); TemplateEngine engine = TemplateFactory.createEngine(config);
Template template = engine.getTemplate("/wit_test.wit"); Template template = engine.getTemplate("/wit_test.wit");
String result = template.render(Dict.of().set("name", "hutool")); String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result)); Assertions.assertEquals("hello,hutool", StrUtil.trim(result));
@ -187,7 +188,7 @@ public class TemplateUtilTest {
// 字符串模板 // 字符串模板
config = new TemplateConfig("templates", ResourceMode.STRING) config = new TemplateConfig("templates", ResourceMode.STRING)
.setCustomEngine(WitEngine.class); .setCustomEngine(WitEngine.class);
engine = TemplateUtil.createEngine(config); engine = TemplateFactory.createEngine(config);
template = engine.getTemplate("<%var name;%>hello,${name}"); template = engine.getTemplate("<%var name;%>hello,${name}");
result = template.render(Dict.of().set("name", "hutool")); result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result)); Assertions.assertEquals("hello,hutool", StrUtil.trim(result));

View File

@ -2,6 +2,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.date.DateUtil; import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.engine.thymeleaf.ThymeleafEngine; import org.dromara.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
@ -28,7 +29,7 @@ public class ThymeleafTest {
@Test @Test
@Disabled @Disabled
public void addDialectTest(){ public void addDialectTest(){
final TemplateEngine engine = TemplateUtil.createEngine(); final TemplateEngine engine = TemplateFactory.createEngine();
if(engine instanceof ThymeleafEngine){ if(engine instanceof ThymeleafEngine){
final org.thymeleaf.TemplateEngine rawEngine = ((ThymeleafEngine) engine).getRawEngine(); final org.thymeleaf.TemplateEngine rawEngine = ((ThymeleafEngine) engine).getRawEngine();
rawEngine.addDialect(new StandardDialect()); rawEngine.addDialect(new StandardDialect());

View File

@ -2,6 +2,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.map.Dict; import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.util.CharsetUtil; import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
import org.dromara.hutool.extra.template.engine.velocity.VelocityEngine; import org.dromara.hutool.extra.template.engine.velocity.VelocityEngine;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -13,7 +14,7 @@ public class VelocityTest {
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH); final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH);
config.setCustomEngine(VelocityEngine.class); config.setCustomEngine(VelocityEngine.class);
config.setCharset(CharsetUtil.GBK); config.setCharset(CharsetUtil.GBK);
final TemplateEngine engine = TemplateUtil.createEngine(config); final TemplateEngine engine = TemplateFactory.createEngine(config);
final Template template = engine.getTemplate("velocity_test_gbk.vtl"); final Template template = engine.getTemplate("velocity_test_gbk.vtl");
final String result = template.render(Dict.of().set("name", "hutool")); final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", result); Assertions.assertEquals("你好,hutool", result);