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.