You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/12/19 09:12:43 UTC

[shardingsphere] branch master updated: Refactor AdviceExecutor (#22971)

This is an automated email from the ASF dual-hosted git repository.

panjuan 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 b774c8ec496 Refactor AdviceExecutor (#22971)
b774c8ec496 is described below

commit b774c8ec496353614f9161c7da3b70a27f8188ea
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Dec 19 17:12:37 2022 +0800

    Refactor AdviceExecutor (#22971)
    
    * Refactor AdviceExecutor
    
    * Refactor AdviceExecutor
---
 .../agent/core/plugin/executor/AdviceExecutor.java             | 10 +++++-----
 .../core/plugin/executor/type/ConstructorAdviceExecutor.java   |  7 +++----
 .../plugin/executor/type/InstanceMethodAdviceExecutor.java     |  6 +++---
 .../core/plugin/executor/type/StaticMethodAdviceExecutor.java  |  6 +++---
 .../agent/core/transformer/builder/MethodAdvisorBuilder.java   |  2 +-
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
index 3eb9937c82c..502d3819069 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/AdviceExecutor.java
@@ -17,8 +17,8 @@
 
 package org.apache.shardingsphere.agent.core.plugin.executor;
 
+import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.dynamic.DynamicType.Builder;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
 
 /**
  * Advice executor.
@@ -26,11 +26,11 @@ import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
 public interface AdviceExecutor {
     
     /**
-     * Build method advisor.
+     * Decorate advice builder.
      *
      * @param builder original builder
-     * @param methodAdvisor method advisor
-     * @return built builder
+     * @param pointcut method pointcut
+     * @return decorated builder
      */
-    Builder<?> buildAdvisor(Builder<?> builder, MethodAdvisor methodAdvisor);
+    Builder<?> decorateBuilder(Builder<?> builder, MethodDescription pointcut);
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
index eb7cb9555c8..301c8dfcb10 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/ConstructorAdviceExecutor.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.executor.type;
 
 import lombok.RequiredArgsConstructor;
+import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.dynamic.DynamicType.Builder;
 import net.bytebuddy.implementation.MethodDelegation;
 import net.bytebuddy.implementation.SuperMethodCall;
@@ -31,7 +32,6 @@ import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
 import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
 import org.apache.shardingsphere.agent.core.plugin.PluginContext;
 import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
 
 import java.util.Collection;
 
@@ -68,8 +68,7 @@ public final class ConstructorAdviceExecutor implements AdviceExecutor {
     }
     
     @Override
-    public Builder<?> buildAdvisor(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
-        return builder.constructor(ElementMatchers.is(methodAdvisor.getPointcut()))
-                .intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor())));
+    public Builder<?> decorateBuilder(final Builder<?> builder, final MethodDescription pointcut) {
+        return builder.constructor(ElementMatchers.is(pointcut)).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(this)));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
index 79d17ea5053..5d1ece3e16b 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/InstanceMethodAdviceExecutor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.core.plugin.executor.type;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
+import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.dynamic.DynamicType.Builder;
 import net.bytebuddy.implementation.MethodDelegation;
 import net.bytebuddy.implementation.bind.annotation.AllArguments;
@@ -34,7 +35,6 @@ import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
 import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
 import org.apache.shardingsphere.agent.core.plugin.PluginContext;
 import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
 
 import java.lang.reflect.Method;
 import java.util.Collection;
@@ -123,7 +123,7 @@ public final class InstanceMethodAdviceExecutor implements AdviceExecutor {
     }
     
     @Override
-    public Builder<?> buildAdvisor(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
-        return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
+    public Builder<?> decorateBuilder(final Builder<?> builder, final MethodDescription pointcut) {
+        return builder.method(ElementMatchers.is(pointcut)).intercept(MethodDelegation.withDefaultConfiguration().to(this));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
index 7b83eb28f6e..61d2c4f9264 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/executor/type/StaticMethodAdviceExecutor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.core.plugin.executor.type;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
+import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.dynamic.DynamicType.Builder;
 import net.bytebuddy.implementation.MethodDelegation;
 import net.bytebuddy.implementation.bind.annotation.AllArguments;
@@ -32,7 +33,6 @@ import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
 import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
 import org.apache.shardingsphere.agent.core.plugin.PluginContext;
 import org.apache.shardingsphere.agent.core.plugin.executor.AdviceExecutor;
-import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
 
 import java.lang.reflect.Method;
 import java.util.Collection;
@@ -121,7 +121,7 @@ public final class StaticMethodAdviceExecutor implements AdviceExecutor {
     }
     
     @Override
-    public Builder<?> buildAdvisor(final Builder<?> builder, final MethodAdvisor methodAdvisor) {
-        return builder.method(ElementMatchers.is(methodAdvisor.getPointcut())).intercept(MethodDelegation.withDefaultConfiguration().to(methodAdvisor.getAdviceExecutor()));
+    public Builder<?> decorateBuilder(final Builder<?> builder, final MethodDescription pointcut) {
+        return builder.method(ElementMatchers.is(pointcut)).intercept(MethodDelegation.withDefaultConfiguration().to(this));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/MethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/MethodAdvisorBuilder.java
index 51e0d1e0d94..27845c3de6f 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/MethodAdvisorBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/MethodAdvisorBuilder.java
@@ -61,7 +61,7 @@ public final class MethodAdvisorBuilder {
         Builder<?> result = builder;
         for (MethodAdvisor each : getMatchedMethodAdvisors()) {
             try {
-                result = each.getAdviceExecutor().buildAdvisor(result, each);
+                result = each.getAdviceExecutor().decorateBuilder(result, each.getPointcut());
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON