浏览代码

添加 createIfAbsent 方法

James 4 年之前
父节点
当前提交
6de6941dc1
共有 1 个文件被更改,包括 27 次插入0 次删除
  1. 27 0
      src/main/java/com/jfinal/template/Engine.java

+ 27 - 0
src/main/java/com/jfinal/template/Engine.java

@@ -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) {