T proxy(final T target, final Aspect aspect) {
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyFactory.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyEngine.java
similarity index 86%
rename from hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyFactory.java
rename to hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyEngine.java
index 651e7033d..cbfb7cc0c 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyFactory.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/engine/spring/SpringCglibProxyEngine.java
@@ -12,8 +12,8 @@
package org.dromara.hutool.extra.aop.engine.spring;
-import org.dromara.hutool.extra.aop.ProxyFactory;
import org.dromara.hutool.extra.aop.Aspect;
+import org.dromara.hutool.extra.aop.engine.ProxyEngine;
import org.springframework.cglib.proxy.Enhancer;
/**
@@ -22,8 +22,7 @@ import org.springframework.cglib.proxy.Enhancer;
* @author looly
*
*/
-public class SpringCglibProxyFactory implements ProxyFactory {
- private static final long serialVersionUID = 1L;
+public class SpringCglibProxyEngine implements ProxyEngine {
@Override
@SuppressWarnings("unchecked")
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/package-info.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/package-info.java
index 770cbac08..c66b3e95f 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/package-info.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/aop/package-info.java
@@ -17,6 +17,10 @@
* 基于Spring-cglib代理
*
* 考虑到cglib库不再更新且对JDK9+兼容性问题,不再封装
+ *
+ * createEngine proxy
+ * ProxyEngineFactory =》 ProxyEngine =》 Proxy
+ *
*
* @author looly
*
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinException.java
index 0f155eb88..29a359eb4 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinException.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinException.java
@@ -13,37 +13,75 @@
package org.dromara.hutool.extra.pinyin;
import org.dromara.hutool.core.exception.ExceptionUtil;
+import org.dromara.hutool.core.exception.HutoolException;
import org.dromara.hutool.core.text.StrUtil;
/**
* 模板异常
*
- * @author xiaoleilu
+ * @author looly
*/
-public class PinyinException extends RuntimeException {
+public class PinyinException extends HutoolException {
private static final long serialVersionUID = 1L;
+ /**
+ * 构造
+ *
+ * @param e 异常
+ */
public PinyinException(final Throwable e) {
- super(ExceptionUtil.getMessage(e), e);
+ super(e);
}
+ /**
+ * 构造
+ *
+ * @param message 消息
+ */
public PinyinException(final String message) {
super(message);
}
+ /**
+ * 构造
+ *
+ * @param messageTemplate 消息模板
+ * @param params 参数
+ */
public PinyinException(final String messageTemplate, final Object... params) {
- super(StrUtil.format(messageTemplate, params));
+ super(messageTemplate, params);
}
- public PinyinException(final String message, final Throwable throwable) {
- super(message, throwable);
+ /**
+ * 构造
+ *
+ * @param message 消息
+ * @param cause 被包装的子异常
+ */
+ public PinyinException(final String message, final Throwable cause) {
+ super(message, cause);
}
- public PinyinException(final String message, final Throwable throwable, final boolean enableSuppression, final boolean writableStackTrace) {
- super(message, throwable, enableSuppression, writableStackTrace);
+ /**
+ * 构造
+ *
+ * @param message 消息
+ * @param cause 被包装的子异常
+ * @param enableSuppression 是否启用抑制
+ * @param writableStackTrace 堆栈跟踪是否应该是可写的
+ */
+ public PinyinException(final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
}
- public PinyinException(final Throwable throwable, final String messageTemplate, final Object... params) {
- super(StrUtil.format(messageTemplate, params), throwable);
+ /**
+ * 构造
+ *
+ * @param cause 被包装的子异常
+ * @param messageTemplate 消息模板
+ * @param params 参数
+ */
+ public PinyinException(final Throwable cause, final String messageTemplate, final Object... params) {
+ super(cause, messageTemplate, params);
}
}
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinUtil.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinUtil.java
index d7df1ae22..f523b8653 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinUtil.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinUtil.java
@@ -12,25 +12,26 @@
package org.dromara.hutool.extra.pinyin;
+import org.dromara.hutool.core.regex.PatternPool;
+import org.dromara.hutool.core.regex.ReUtil;
import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.extra.pinyin.engine.PinyinFactory;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngineFactory;
/**
- * 拼音工具类,封装了TinyPinyin、JPinyin、Pinyin4j,通过SPI自动识别。
+ * 拼音工具类,用于快速获取拼音
*
* @author looly
*/
public class PinyinUtil {
- private static final String CHINESE_REGEX = "[\\u4e00-\\u9fa5]";
-
/**
* 获得全局单例的拼音引擎
*
* @return 全局单例的拼音引擎
*/
- public static PinyinEngine getEngine(){
- return PinyinFactory.get();
+ public static PinyinEngine getEngine() {
+ return PinyinEngineFactory.getEngine();
}
/**
@@ -92,6 +93,6 @@ public class PinyinUtil {
* @return 是否为中文字符
*/
public static boolean isChinese(final char c) {
- return '〇' == c || String.valueOf(c).matches(CHINESE_REGEX);
+ return '〇' == c || ReUtil.isMatch(PatternPool.CHINESE, String.valueOf(c));
}
}
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngine.java
similarity index 97%
rename from hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinEngine.java
rename to hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngine.java
index 186085cf0..ab0c71e45 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/PinyinEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngine.java
@@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
-package org.dromara.hutool.extra.pinyin;
+package org.dromara.hutool.extra.pinyin.engine;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.text.StrUtil;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinFactory.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngineFactory.java
similarity index 81%
rename from hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinFactory.java
rename to hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngineFactory.java
index 5293d0596..3e1cebd56 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinFactory.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/PinyinEngineFactory.java
@@ -15,24 +15,24 @@ package org.dromara.hutool.extra.pinyin.engine;
import org.dromara.hutool.core.lang.Singleton;
import org.dromara.hutool.core.spi.SpiUtil;
import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
import org.dromara.hutool.extra.pinyin.PinyinException;
import org.dromara.hutool.log.StaticLog;
/**
- * 简单拼音引擎工厂,用于根据用户引入的拼音库jar,自动创建对应的拼音引擎对象
+ * 简单拼音引擎工厂,用于根据用户引入的拼音库jar,自动创建对应的拼音引擎对象
+ * 使用简单工厂(Simple Factory)模式
*
* @author looly
*/
-public class PinyinFactory {
+public class PinyinEngineFactory {
/**
* 获得单例的PinyinEngine
*
* @return 单例的PinyinEngine
*/
- public static PinyinEngine get(){
- return Singleton.get(PinyinEngine.class.getName(), PinyinFactory::of);
+ public static PinyinEngine getEngine(){
+ return Singleton.get(PinyinEngine.class.getName(), PinyinEngineFactory::createEngine);
}
/**
@@ -41,8 +41,8 @@ public class PinyinFactory {
*
* @return {@link PinyinEngine}
*/
- public static PinyinEngine of() {
- final PinyinEngine engine = doCreate();
+ public static PinyinEngine createEngine() {
+ final PinyinEngine engine = doCreateEngine();
StaticLog.debug("Use [{}] Engine As Default.", StrUtil.removeSuffix(engine.getClass().getSimpleName(), "Engine"));
return engine;
}
@@ -53,7 +53,7 @@ public class PinyinFactory {
*
* @return {@link PinyinEngine}
*/
- private static PinyinEngine doCreate() {
+ private static PinyinEngine doCreateEngine() {
final PinyinEngine engine = SpiUtil.loadFirstAvailable(PinyinEngine.class);
if(null != engine){
return engine;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/bopomofo4j/Bopomofo4jEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/bopomofo4j/Bopomofo4jEngine.java
index 15505f14f..1d58ea54d 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/bopomofo4j/Bopomofo4jEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/bopomofo4j/Bopomofo4jEngine.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.extra.pinyin.engine.bopomofo4j;
import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
import com.rnkrsoft.bopomofo4j.Bopomofo4j;
import com.rnkrsoft.bopomofo4j.ToneType;
@@ -39,6 +39,9 @@ import com.rnkrsoft.bopomofo4j.ToneType;
*/
public class Bopomofo4jEngine implements PinyinEngine {
+ /**
+ * 构造
+ */
public Bopomofo4jEngine(){
Bopomofo4j.local();
}
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbbpinyin/HoubbPinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbbpinyin/HoubbPinyinEngine.java
index 41e2e47fc..1eb82461d 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbbpinyin/HoubbPinyinEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbbpinyin/HoubbPinyinEngine.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.extra.pinyin.engine.houbbpinyin;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
import com.github.houbb.pinyin.constant.enums.PinyinStyleEnum;
import com.github.houbb.pinyin.util.PinyinHelper;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java
index d3d17e00c..c2e63006e 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.extra.pinyin.engine.jpinyin;
import org.dromara.hutool.core.array.ArrayUtil;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
import com.github.stuxuhai.jpinyin.PinyinException;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java
index 7ed714223..3ec3325d9 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.extra.pinyin.engine.pinyin4j;
import org.dromara.hutool.core.array.ArrayUtil;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
import org.dromara.hutool.extra.pinyin.PinyinException;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java
index 3c7176f6c..b2143da66 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.extra.pinyin.engine.tinypinyin;
-import org.dromara.hutool.extra.pinyin.PinyinEngine;
+import org.dromara.hutool.extra.pinyin.engine.PinyinEngine;
import com.github.promeg.pinyinhelper.Pinyin;
/**
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/package-info.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/package-info.java
index 74caac57b..50ba8d38c 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/package-info.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/package-info.java
@@ -11,7 +11,11 @@
*/
/**
- * 拼音工具封装,入口为PinyinUtil
+ * 拼音相关封装
+ *
+ * createEngine getPinyin
+ * PinyinEngineFactory =》 PinyinEngine =》 拼音
+ *
*
* @author looly
*
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/servlet/package-info.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/servlet/package-info.java
deleted file mode 100644
index b93640888..000000000
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/servlet/package-info.java
+++ /dev/null
@@ -1,19 +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.
- */
-
-/**
- * Servlet封装,包括Servlet参数获取、文件上传、Response写出等,入口为ServletUtil
- *
- * @author looly
- *
- */
-package org.dromara.hutool.extra.servlet;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateConfig.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateConfig.java
index 7c913db24..c08732de6 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateConfig.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateConfig.java
@@ -28,6 +28,9 @@ import org.dromara.hutool.extra.template.engine.TemplateEngine;
public class TemplateConfig implements Serializable {
private static final long serialVersionUID = 2933113779920339523L;
+ /**
+ * 默认配置
+ */
public static final TemplateConfig DEFAULT = new TemplateConfig();
/**
@@ -206,17 +209,17 @@ public class TemplateConfig implements Serializable {
@Override
public boolean equals(final Object o) {
- if (this == o){
+ if (this == o) {
return true;
}
- if (o == null || getClass() != o.getClass()){
+ if (o == null || getClass() != o.getClass()) {
return false;
}
final TemplateConfig that = (TemplateConfig) o;
return Objects.equals(charset, that.charset) &&
- Objects.equals(path, that.path) &&
- resourceMode == that.resourceMode &&
- Objects.equals(customEngine, that.customEngine);
+ Objects.equals(path, that.path) &&
+ resourceMode == that.resourceMode &&
+ Objects.equals(customEngine, that.customEngine);
}
@Override
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java
index 71dbff557..8be1cf5e3 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateException.java
@@ -12,38 +12,74 @@
package org.dromara.hutool.extra.template;
-import org.dromara.hutool.core.exception.ExceptionUtil;
-import org.dromara.hutool.core.text.StrUtil;
+import org.dromara.hutool.core.exception.HutoolException;
/**
* 模板异常
*
* @author xiaoleilu
*/
-public class TemplateException extends RuntimeException {
+public class TemplateException extends HutoolException {
private static final long serialVersionUID = 8247610319171014183L;
+ /**
+ * 构造
+ *
+ * @param e 异常
+ */
public TemplateException(final Throwable e) {
- super(ExceptionUtil.getMessage(e), e);
+ super(e);
}
+ /**
+ * 构造
+ *
+ * @param message 消息
+ */
public TemplateException(final String message) {
super(message);
}
+ /**
+ * 构造
+ *
+ * @param messageTemplate 消息模板
+ * @param params 参数
+ */
public TemplateException(final String messageTemplate, final Object... params) {
- super(StrUtil.format(messageTemplate, params));
+ super(messageTemplate, params);
}
- public TemplateException(final String message, final Throwable throwable) {
- super(message, throwable);
+ /**
+ * 构造
+ *
+ * @param message 消息
+ * @param cause 被包装的子异常
+ */
+ public TemplateException(final String message, final Throwable cause) {
+ super(message, cause);
}
- public TemplateException(final String message, final Throwable throwable, final boolean enableSuppression, final boolean writableStackTrace) {
- super(message, throwable, enableSuppression, writableStackTrace);
+ /**
+ * 构造
+ *
+ * @param message 消息
+ * @param cause 被包装的子异常
+ * @param enableSuppression 是否启用抑制
+ * @param writableStackTrace 堆栈跟踪是否应该是可写的
+ */
+ public TemplateException(final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
}
- public TemplateException(final Throwable throwable, final String messageTemplate, final Object... params) {
- super(StrUtil.format(messageTemplate, params), throwable);
+ /**
+ * 构造
+ *
+ * @param cause 被包装的子异常
+ * @param messageTemplate 消息模板
+ * @param params 参数
+ */
+ public TemplateException(final Throwable cause, final String messageTemplate, final Object... params) {
+ super(cause, messageTemplate, params);
}
}
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateUtil.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateUtil.java
new file mode 100755
index 000000000..c6505ac83
--- /dev/null
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateUtil.java
@@ -0,0 +1,58 @@
+/*
+ * 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.TemplateEngine;
+import org.dromara.hutool.extra.template.engine.TemplateEngineFactory;
+
+import java.io.Writer;
+import java.util.Map;
+
+/**
+ * 提供模板工具类,用于快捷模板融合
+ *
+ * @author looly
+ */
+public class TemplateUtil {
+
+ /**
+ * 获取单例的模板引擎
+ *
+ * @return {@link TemplateEngine}
+ */
+ public static TemplateEngine getEngine() {
+ return TemplateEngineFactory.getEngine();
+ }
+
+ /**
+ * 融合模板和参数,返回融合后的内容
+ *
+ * @param templateContent 模板内容
+ * @param bindingMap 参数
+ * @return 内容
+ */
+ public static String render(final String templateContent, final Map, ?> bindingMap) {
+ return getEngine().getTemplate(templateContent).render(bindingMap);
+ }
+
+ /**
+ * 融合模板和参数,返回融合后的内容
+ *
+ * @param templateContent 模板内容
+ * @param bindingMap 参数
+ * @param writer 融合内容输出的位置
+ */
+ public static void render(final String templateContent, final Map, ?> bindingMap, final Writer writer) {
+ getEngine().getTemplate(templateContent).render(bindingMap, writer);
+ }
+}
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateFactory.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngineFactory.java
similarity index 81%
rename from hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateFactory.java
rename to hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngineFactory.java
index 172e6fac8..8ecc27ebb 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/TemplateFactory.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngineFactory.java
@@ -10,21 +10,23 @@
* 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.core.lang.Singleton;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.spi.SpiUtil;
import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.extra.template.engine.TemplateEngine;
+import org.dromara.hutool.extra.template.TemplateConfig;
+import org.dromara.hutool.extra.template.TemplateException;
import org.dromara.hutool.log.StaticLog;
/**
- * 简单模板殷勤工厂,用于根据用户引入的模板引擎jar,自动创建对应的模板引擎对象
+ * 简单模板引擎工厂,用于根据用户引入的模板引擎jar,自动创建对应的模板引擎对象
+ * 使用简单工厂(Simple Factory)模式
*
* @author looly
*/
-public class TemplateFactory {
+public class TemplateEngineFactory {
/**
* 根据用户引入的模板引擎jar,自动创建对应的模板引擎对象
@@ -33,7 +35,7 @@ public class TemplateFactory {
* @return 单例的TemplateEngine
*/
public static TemplateEngine getEngine() {
- return Singleton.get(TemplateEngine.class.getName(), TemplateFactory::createEngine);
+ return Singleton.get(TemplateEngine.class.getName(), TemplateEngineFactory::createEngine);
}
/**
@@ -55,7 +57,7 @@ public class TemplateFactory {
* @return {@link TemplateEngine}
*/
public static TemplateEngine createEngine(final TemplateConfig config) {
- final TemplateEngine engine = doCreate(config);
+ final TemplateEngine engine = doCreateEngine(config);
StaticLog.debug("Use [{}] Engine As Default.", StrUtil.removeSuffix(engine.getClass().getSimpleName(), "Engine"));
return engine;
}
@@ -67,7 +69,7 @@ public class TemplateFactory {
* @param config 模板配置,包括编码、模板文件path等信息
* @return {@link TemplateEngine}
*/
- private static TemplateEngine doCreate(final TemplateConfig config) {
+ private static TemplateEngine doCreateEngine(final TemplateConfig config) {
final Class extends TemplateEngine> customEngineClass = config.getCustomEngine();
final TemplateEngine engine;
if (null != customEngineClass) {
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/package-info.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/package-info.java
index f201125ff..bc07ff176 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/package-info.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/package-info.java
@@ -11,10 +11,15 @@
*/
/**
- * 第三方模板引擎封装,提供统一的接口用于适配第三方模板引擎
+ * 第三方模板引擎封装,提供统一的接口用于适配第三方模板引擎,提供:
+ *
+ * - TemplateEngine:模板引擎接口,用于不同引擎的实现。
+ * - Template: 模板接口,用于不同引擎模板对象包装。
+ * - TemplateConfig:模板配置,用于提供公共配置项。
+ *
*
- *
- * TemplateFactory =》 TemplateEngine =》 Template =》 内容
+ * createEngine getTemplate render
+ * TemplateEngineFactory =》 TemplateEngine =》 Template =》 内容
*
*
* @author looly
diff --git a/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.ProxyFactory b/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.engine.ProxyEngine
similarity index 80%
rename from hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.ProxyFactory
rename to hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.engine.ProxyEngine
index 830440e23..bf301136b 100644
--- a/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.ProxyFactory
+++ b/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.aop.engine.ProxyEngine
@@ -10,5 +10,5 @@
# See the Mulan PSL v2 for more details.
#
-org.dromara.hutool.extra.aop.engine.spring.SpringCglibProxyFactory
-org.dromara.hutool.extra.aop.engine.jdk.JdkProxyFactory
+org.dromara.hutool.extra.aop.engine.spring.SpringCglibProxyEngine
+org.dromara.hutool.extra.aop.engine.jdk.JdkProxyEngine
diff --git a/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.pinyin.PinyinEngine b/hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.pinyin.engine.PinyinEngine
similarity index 100%
rename from hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.pinyin.PinyinEngine
rename to hutool-extra/src/main/resources/META-INF/services/org.dromara.hutool.extra.pinyin.engine.PinyinEngine
diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/JetbrickTest.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/JetbrickTest.java
index c681fcc5b..348cf4f6e 100644
--- a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/JetbrickTest.java
+++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/JetbrickTest.java
@@ -3,6 +3,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
+import org.dromara.hutool.extra.template.engine.TemplateEngineFactory;
import org.dromara.hutool.extra.template.engine.jetbrick.JetbrickEngine;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -14,7 +15,7 @@ public class JetbrickTest {
//classpath模板
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH)
.setCustomEngine(JetbrickEngine.class);
- final TemplateEngine engine = TemplateFactory.createEngine(config);
+ final TemplateEngine engine = TemplateEngineFactory.createEngine(config);
final Template template = engine.getTemplate("jetbrick_test.jetx");
final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", StrUtil.trim(result));
@@ -25,7 +26,7 @@ public class JetbrickTest {
// 字符串模板
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.STRING)
.setCustomEngine(JetbrickEngine.class);
- final TemplateEngine engine = TemplateFactory.createEngine(config);
+ final TemplateEngine engine = TemplateEngineFactory.createEngine(config);
final Template template = engine.getTemplate("hello,${name}");
final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result));
diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/TemplateFactoryTest.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/TemplateFactoryTest.java
index d026a2d56..5ca602084 100644
--- a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/TemplateFactoryTest.java
+++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/TemplateFactoryTest.java
@@ -4,6 +4,7 @@ import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.extra.template.TemplateConfig.ResourceMode;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
+import org.dromara.hutool.extra.template.engine.TemplateEngineFactory;
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.freemarker.FreemarkerEngine;
@@ -31,13 +32,13 @@ public class TemplateFactoryTest {
@Test
public void createEngineTest() {
// 字符串模板, 默认模板引擎,此处为Beetl
- TemplateEngine engine = TemplateFactory.createEngine(new TemplateConfig());
+ TemplateEngine engine = TemplateEngineFactory.createEngine(new TemplateConfig());
final Template template = engine.getTemplate("hello,${name}");
final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result);
// classpath中获取模板
- engine = TemplateFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
+ engine = TemplateEngineFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
final Template template2 = engine.getTemplate("beetl_test.btl");
final String result2 = template2.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result2);
@@ -61,7 +62,7 @@ public class TemplateFactoryTest {
@Test
public void rythmEngineTest() {
// 字符串模板
- final TemplateEngine engine = TemplateFactory.createEngine(
+ final TemplateEngine engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(RythmEngine.class));
final Template template = engine.getTemplate("hello,@name");
final String result = template.render(Dict.of().set("name", "hutool"));
@@ -76,14 +77,14 @@ public class TemplateFactoryTest {
@Test
public void freemarkerEngineTest() {
// 字符串模板
- TemplateEngine engine = TemplateFactory.createEngine(
+ TemplateEngine engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(FreemarkerEngine.class));
Template template = engine.getTemplate("hello,${name}");
String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", result);
//ClassPath模板
- engine = TemplateFactory.createEngine(
+ engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(FreemarkerEngine.class));
template = engine.getTemplate("freemarker_test.ftl");
result = template.render(Dict.of().set("name", "hutool"));
@@ -93,14 +94,14 @@ public class TemplateFactoryTest {
@Test
public void velocityEngineTest() {
// 字符串模板
- TemplateEngine engine = TemplateFactory.createEngine(
+ TemplateEngine engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates", ResourceMode.STRING).setCustomEngine(VelocityEngine.class));
Template template = engine.getTemplate("你好,$name");
String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", result);
//ClassPath模板
- engine = TemplateFactory.createEngine(
+ engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(VelocityEngine.class));
template = engine.getTemplate("velocity_test.vtl");
result = template.render(Dict.of().set("name", "hutool"));
@@ -114,7 +115,7 @@ public class TemplateFactoryTest {
@Test
public void enjoyEngineTest() {
// 字符串模板
- TemplateEngine engine = TemplateFactory.createEngine(
+ TemplateEngine engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(EnjoyEngine.class));
Template template = engine.getTemplate("#(x + 123)");
String result = template.render(Dict.of().set("x", 1));
@@ -131,14 +132,14 @@ public class TemplateFactoryTest {
@Test
public void thymeleafEngineTest() {
// 字符串模板
- TemplateEngine engine = TemplateFactory.createEngine(
+ TemplateEngine engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates").setCustomEngine(ThymeleafEngine.class));
Template template = engine.getTemplate("");
String result = template.render(Dict.of().set("message", "Hutool"));
Assertions.assertEquals("Hutool
", result);
//ClassPath模板
- engine = TemplateFactory.createEngine(
+ engine = TemplateEngineFactory.createEngine(
new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(ThymeleafEngine.class));
template = engine.getTemplate("thymeleaf_test.ttl");
result = template.render(Dict.of().set("message", "Hutool"));
@@ -151,13 +152,13 @@ public class TemplateFactoryTest {
@Test
public void pebbleEngineTest() {
// 字符串模板
- TemplateEngine engine = TemplateFactory.createEngine(new TemplateConfig("templates").setCustomEngine(PebbleTemplateEngine.class));
+ TemplateEngine engine = TemplateEngineFactory.createEngine(new TemplateConfig("templates").setCustomEngine(PebbleTemplateEngine.class));
Template template = engine.getTemplate("{{ message }}
");
String result = template.render(Dict.of().set("message", "Hutool"));
Assertions.assertEquals("Hutool
", result);
//ClassPath模板
- engine = TemplateFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(PebbleTemplateEngine.class));
+ engine = TemplateEngineFactory.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(PebbleTemplateEngine.class));
template = engine.getTemplate("pebble_test.peb");
result = template.render(Dict.of().set("name", "Hutool"));
Assertions.assertEquals("hello, Hutool", result);
@@ -180,7 +181,7 @@ public class TemplateFactoryTest {
//classpath模板
TemplateConfig config = new TemplateConfig("templates", ResourceMode.CLASSPATH)
.setCustomEngine(WitEngine.class);
- TemplateEngine engine = TemplateFactory.createEngine(config);
+ TemplateEngine engine = TemplateEngineFactory.createEngine(config);
Template template = engine.getTemplate("/wit_test.wit");
String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result));
@@ -188,7 +189,7 @@ public class TemplateFactoryTest {
// 字符串模板
config = new TemplateConfig("templates", ResourceMode.STRING)
.setCustomEngine(WitEngine.class);
- engine = TemplateFactory.createEngine(config);
+ engine = TemplateEngineFactory.createEngine(config);
template = engine.getTemplate("<%var name;%>hello,${name}");
result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("hello,hutool", StrUtil.trim(result));
diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/ThymeleafTest.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/ThymeleafTest.java
index 61d86f2f2..73c0451dd 100644
--- a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/ThymeleafTest.java
+++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/ThymeleafTest.java
@@ -3,6 +3,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
+import org.dromara.hutool.extra.template.engine.TemplateEngineFactory;
import org.dromara.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
@@ -29,7 +30,7 @@ public class ThymeleafTest {
@Test
@Disabled
public void addDialectTest(){
- final TemplateEngine engine = TemplateFactory.createEngine();
+ final TemplateEngine engine = TemplateEngineFactory.createEngine();
if(engine instanceof ThymeleafEngine){
final org.thymeleaf.TemplateEngine rawEngine = ((ThymeleafEngine) engine).getRawEngine();
rawEngine.addDialect(new StandardDialect());
diff --git a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/VelocityTest.java b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/VelocityTest.java
index 39118381f..667c5b63f 100644
--- a/hutool-extra/src/test/java/org/dromara/hutool/extra/template/VelocityTest.java
+++ b/hutool-extra/src/test/java/org/dromara/hutool/extra/template/VelocityTest.java
@@ -3,6 +3,7 @@ package org.dromara.hutool.extra.template;
import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.extra.template.engine.TemplateEngine;
+import org.dromara.hutool.extra.template.engine.TemplateEngineFactory;
import org.dromara.hutool.extra.template.engine.velocity.VelocityEngine;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -14,7 +15,7 @@ public class VelocityTest {
final TemplateConfig config = new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH);
config.setCustomEngine(VelocityEngine.class);
config.setCharset(CharsetUtil.GBK);
- final TemplateEngine engine = TemplateFactory.createEngine(config);
+ final TemplateEngine engine = TemplateEngineFactory.createEngine(config);
final Template template = engine.getTemplate("velocity_test_gbk.vtl");
final String result = template.render(Dict.of().set("name", "hutool"));
Assertions.assertEquals("你好,hutool", result);