From 3d249696a78455e7109ee18d9be8bd20d8b34664 Mon Sep 17 00:00:00 2001 From: LamGC Date: Fri, 20 Aug 2021 14:01:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=86=85=E7=BB=84=E4=BB=B6=E7=9A=84=E4=BC=A0=E9=80=92?= =?UTF-8?q?=E6=96=B9=E5=BC=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将传递脚本组件的方式由 Delegate 类属性改为 Binding, 以增加灵活性和可维护性. --- .../script/groovy/GroovyDslDelegate.java | 8 +------- .../script/groovy/GroovyScriptLoader.java | 20 ++++++++++++++++++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java index b7e5645..a778004 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java @@ -16,17 +16,11 @@ import org.codehaus.groovy.runtime.DefaultGroovyMethods; public class GroovyDslDelegate implements Script { private final GroovyScriptInfo scriptInfo = new GroovyScriptInfo(); - private final ScriptHttpClient HTTP; - private final ComputeInstanceManager InstanceManager; /** * 构建一个 DSL Delegate, 并传入可操作对象. - * @param httpClient Http 客户端. - * @param instanceManager 实例管理器. */ - public GroovyDslDelegate(ScriptHttpClient httpClient, ComputeInstanceManager instanceManager) { - HTTP = httpClient; - InstanceManager = instanceManager; + public GroovyDslDelegate() { } /** diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java index ed4449a..6d65b11 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java @@ -1,6 +1,7 @@ package net.lamgc.oracle.sentry.script.groovy; import com.google.common.base.Throwables; +import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; import groovy.util.DelegatingScript; import net.lamgc.oracle.sentry.script.Script; @@ -14,6 +15,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -56,8 +58,9 @@ public class GroovyScriptLoader implements ScriptLoader { Constructor constructor = scriptClass.asSubclass(DelegatingScript.class).getConstructor(); DelegatingScript newScriptObject = constructor.newInstance(); - GroovyDslDelegate dslDelegate = new GroovyDslDelegate(context.HTTP(), context.InstanceManager()); + GroovyDslDelegate dslDelegate = new GroovyDslDelegate(); newScriptObject.setDelegate(dslDelegate); + newScriptObject.setBinding(createBinding(context)); newScriptObject.run(); scriptInfoMap.put(dslDelegate, dslDelegate.getScriptInfo()); return dslDelegate; @@ -71,4 +74,19 @@ public class GroovyScriptLoader implements ScriptLoader { public ScriptInfo getScriptInfo(Script script) { return scriptInfoMap.get(script); } + + private static Binding createBinding(ScriptComponents components) { + Binding binding = new Binding(); + for (Field field : components.getClass().getDeclaredFields()) { + try { + String name = field.getName(); + field.setAccessible(true); + Object o = field.get(components); + binding.setProperty(name, o); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return binding; + } }