|
|
@@ -20,6 +20,7 @@ import java.lang.reflect.Method;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
+import java.util.function.Consumer;
|
|
|
import com.jfinal.kit.HashKit;
|
|
|
import com.jfinal.kit.StrKit;
|
|
|
import com.jfinal.kit.SyncWriteMap;
|
|
|
@@ -112,6 +113,32 @@ public class Engine {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * Create engine if absent with engine name managed by JFinal
|
|
|
+ * <pre>
|
|
|
+ * Example:
|
|
|
+ * Engine engine = Engine.createIfAbsent("myEngine", e -> {
|
|
|
+ * e.setDevMode(true);
|
|
|
+ * e.setToClassPathSourceFactory();
|
|
|
+ * });
|
|
|
+ *
|
|
|
+ * engine.getTemplate("template.html").renderToString();
|
|
|
+ * </>
|
|
|
+ */
|
|
|
+ public static Engine createIfAbsent(String engineName, Consumer<Engine> e) {
|
|
|
+ Engine ret = engineMap.get(engineName);
|
|
|
+ if (ret == null) {
|
|
|
+ synchronized (Engine.class) {
|
|
|
+ ret = engineMap.get(engineName);
|
|
|
+ if (ret == null) {
|
|
|
+ ret = create(engineName);
|
|
|
+ e.accept(ret);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* Remove engine with engine name managed by JFinal
|
|
|
*/
|
|
|
public synchronized static Engine remove(String engineName) {
|