You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/01/08 12:31:44 UTC
[shardingsphere] branch master updated: Add AgentBuilderInterceptChainEngine (#23405)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 218ed539c48 Add AgentBuilderInterceptChainEngine (#23405)
218ed539c48 is described below
commit 218ed539c480663817180f6d1d91d10f457beb4c
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Jan 8 20:31:29 2023 +0800
Add AgentBuilderInterceptChainEngine (#23405)
* Add AgentBuilderInterceptChainEngine
---
.../agent/core/builder/AgentTransformer.java | 9 +++++----
...ptor.java => AgentBuilderInterceptChainEngine.java} | 18 ++++++++++++++----
.../builder/interceptor/AgentBuilderInterceptor.java | 2 +-
.../{ => impl}/MethodAdvisorBuilderInterceptor.java | 3 ++-
.../TargetAdviceObjectBuilderInterceptor.java | 3 ++-
5 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
index 07f72964338..96a2e8d94aa 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
@@ -23,8 +23,9 @@ import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.utility.JavaModule;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
-import org.apache.shardingsphere.agent.core.builder.interceptor.MethodAdvisorBuilderInterceptor;
-import org.apache.shardingsphere.agent.core.builder.interceptor.TargetAdviceObjectBuilderInterceptor;
+import org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptChainEngine;
+import org.apache.shardingsphere.agent.core.builder.interceptor.impl.MethodAdvisorBuilderInterceptor;
+import org.apache.shardingsphere.agent.core.builder.interceptor.impl.TargetAdviceObjectBuilderInterceptor;
import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import org.apache.shardingsphere.agent.core.plugin.PluginLifecycleServiceManager;
@@ -55,7 +56,7 @@ public final class AgentTransformer implements Transformer {
}
ClassLoaderContext classLoaderContext = new ClassLoaderContext(classLoader, pluginJars);
PluginLifecycleServiceManager.init(pluginConfigs, pluginJars, classLoaderContext.getAgentClassLoader(), isEnhancedForProxy);
- Builder<?> targetAdviceObjectBuilder = new TargetAdviceObjectBuilderInterceptor().intercept(builder);
- return new MethodAdvisorBuilderInterceptor(typeDescription, classLoaderContext, advisorConfigs.get(typeDescription.getTypeName())).intercept(targetAdviceObjectBuilder);
+ return AgentBuilderInterceptChainEngine.intercept(builder,
+ new TargetAdviceObjectBuilderInterceptor(), new MethodAdvisorBuilderInterceptor(typeDescription, classLoaderContext, advisorConfigs.get(typeDescription.getTypeName())));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptChainEngine.java
similarity index 63%
copy from agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java
copy to agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptChainEngine.java
index d2638286cc9..500126028b7 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptChainEngine.java
@@ -17,18 +17,28 @@
package org.apache.shardingsphere.agent.core.builder.interceptor;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import net.bytebuddy.dynamic.DynamicType.Builder;
/**
- * agent builder interceptor.
+ * Agent builder intercept chain engine.
*/
-public interface AgentBuilderInterceptor {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AgentBuilderInterceptChainEngine {
/**
* Intercept agent builder.
*
- * @param builder to be intercepted agent builder
+ * @param builder origin agent builder
+ * @param interceptors agent builder interceptors
* @return intercepted agent builder
*/
- Builder<?> intercept(Builder<?> builder);
+ public static Builder<?> intercept(final Builder<?> builder, final AgentBuilderInterceptor... interceptors) {
+ Builder<?> result = builder;
+ for (AgentBuilderInterceptor each : interceptors) {
+ result = each.intercept(result);
+ }
+ return result;
+ }
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java
index d2638286cc9..50f3f5d5b4d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/AgentBuilderInterceptor.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.agent.core.builder.interceptor;
import net.bytebuddy.dynamic.DynamicType.Builder;
/**
- * agent builder interceptor.
+ * Agent builder interceptor.
*/
public interface AgentBuilderInterceptor {
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/MethodAdvisorBuilderInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
similarity index 96%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/MethodAdvisorBuilderInterceptor.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
index bcb29a896dc..c90bab35c30 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/MethodAdvisorBuilderInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/MethodAdvisorBuilderInterceptor.java
@@ -15,11 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.builder.interceptor;
+package org.apache.shardingsphere.agent.core.builder.interceptor.impl;
import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType.Builder;
+import org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptor;
import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
import org.apache.shardingsphere.agent.core.log.LoggerFactory;
import org.apache.shardingsphere.agent.core.log.LoggerFactory.Logger;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/TargetAdviceObjectBuilderInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/TargetAdviceObjectBuilderInterceptor.java
similarity index 94%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/TargetAdviceObjectBuilderInterceptor.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/TargetAdviceObjectBuilderInterceptor.java
index 9f8064ea029..d04d446b322 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/TargetAdviceObjectBuilderInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/interceptor/impl/TargetAdviceObjectBuilderInterceptor.java
@@ -15,12 +15,13 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.core.builder.interceptor;
+package org.apache.shardingsphere.agent.core.builder.interceptor.impl;
import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.FieldAccessor;
import net.bytebuddy.jar.asm.Opcodes;
import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
+import org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptor;
/**
* Target advice object builder interceptor.