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/12 05:59:30 UTC

[shardingsphere] branch master updated: Remove builder of PluginPointcuts (#22817)

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 11c298e0e97 Remove builder of PluginPointcuts (#22817)
11c298e0e97 is described below

commit 11c298e0e977bd5e20a75d42a286023218705029
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Dec 12 13:59:24 2022 +0800

    Remove builder of PluginPointcuts (#22817)
---
 .../agent/pointcut/InstanceMethodPointcut.java     |   4 +
 .../agent/pointcut/PluginPointcuts.java            | 203 +--------------------
 .../agent/pointcut/StaticMethodPointcut.java       |   4 +
 .../AbstractPluginDefinitionService.java           |   3 +-
 .../core/definition/InterceptorPointRegistry.java  |  10 +-
 .../agent/core/plugin/AgentPluginLoader.java       |   3 +-
 .../transformer/ShardingSphereTransformerTest.java |  46 ++---
 .../core/plugin/loader/AgentPluginLoaderTest.java  |  19 +-
 .../BaseLoggingPluginDefinitionService.java        |  15 +-
 .../PrometheusPluginDefinitionService.java         |  15 +-
 .../definition/JaegerPluginDefinitionService.java  |  20 +-
 ...penTelemetryTracingPluginDefinitionService.java |  19 +-
 .../OpenTracingPluginDefinitionService.java        |  20 +-
 .../definition/ZipkinPluginDefinitionService.java  |  20 +-
 14 files changed, 95 insertions(+), 306 deletions(-)

diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/InstanceMethodPointcut.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/InstanceMethodPointcut.java
index e5e76a7d137..cf7f4a3d0c8 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/InstanceMethodPointcut.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/InstanceMethodPointcut.java
@@ -34,4 +34,8 @@ public final class InstanceMethodPointcut implements AgentPointcut {
     private final String adviceClassName;
     
     private final boolean overrideArgs;
+    
+    public InstanceMethodPointcut(final ElementMatcher<? super MethodDescription> matcher, final String adviceClassName) {
+        this(matcher, adviceClassName, false);
+    }
 }
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/PluginPointcuts.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/PluginPointcuts.java
index d5e67f45d68..4d4293d3b56 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/PluginPointcuts.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/PluginPointcuts.java
@@ -19,12 +19,9 @@ package org.apache.shardingsphere.agent.pointcut;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import net.bytebuddy.description.method.MethodDescription;
-import net.bytebuddy.matcher.ElementMatcher;
-import net.bytebuddy.matcher.ElementMatchers;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
+import java.util.LinkedList;
 
 /**
  * Plugin pointcuts.
@@ -35,199 +32,9 @@ public final class PluginPointcuts {
     
     private final String targetClassName;
     
-    private final List<ConstructorPointcut> constructorPointcuts;
+    private final Collection<ConstructorPointcut> constructorPointcuts = new LinkedList<>();
     
-    private final List<InstanceMethodPointcut> instanceMethodPointcuts;
+    private final Collection<InstanceMethodPointcut> instanceMethodPointcuts = new LinkedList<>();
     
-    private final List<StaticMethodPointcut> staticMethodPointcuts;
-    
-    /**
-     * Plugin advice definition configuration builder.
-     */
-    @RequiredArgsConstructor
-    public static final class Builder {
-        
-        private final String targetClassName;
-        
-        private final List<ConstructorPointcut> constructorPointcuts = new ArrayList<>();
-        
-        private final List<InstanceMethodPointcut> instanceMethodPointcuts = new ArrayList<>();
-        
-        private final List<StaticMethodPointcut> staticMethodPointcuts = new ArrayList<>();
-        
-        /**
-         * Configure the intercepting point on constructor.
-         *
-         * @param matcher constraints
-         * @return configuration point builder
-         */
-        public ConstructorPointBuilder onConstructor(final ElementMatcher<? super MethodDescription> matcher) {
-            return new ConstructorPointBuilder(this, matcher);
-        }
-        
-        /**
-         * Configure the intercepting point around instance method.
-         *
-         * @param matcher constraints
-         * @return instance method point builder
-         */
-        public InstanceMethodPointBuilder aroundInstanceMethod(final ElementMatcher<? super MethodDescription> matcher) {
-            return new InstanceMethodPointBuilder(this, matcher);
-        }
-        
-        /**
-         * Configure the intercepting point around instance method.
-         *
-         * @param matcher constraints
-         * @return static method point builder
-         */
-        public StaticMethodPointBuilder aroundStaticMethod(final ElementMatcher<? super MethodDescription> matcher) {
-            return new StaticMethodPointBuilder(this, matcher);
-        }
-        
-        /**
-         * Build plugin advice definition.
-         *
-         * @return plugin advice definition
-         */
-        public PluginPointcuts install() {
-            return new PluginPointcuts(targetClassName, constructorPointcuts, instanceMethodPointcuts, staticMethodPointcuts);
-        }
-        
-        /**
-         * Instance method intercepting point configuration builder.
-         */
-        @RequiredArgsConstructor
-        public static final class InstanceMethodPointBuilder {
-            
-            private final Builder builder;
-            
-            private final ElementMatcher<? super MethodDescription> matcher;
-            
-            private String adviceClassName;
-            
-            private boolean overrideArgs;
-            
-            /**
-             * Configure implementation for interceptor point.
-             *
-             * @param adviceClassName advice class name
-             * @return instance method point builder
-             */
-            public InstanceMethodPointBuilder implement(final String adviceClassName) {
-                this.adviceClassName = adviceClassName;
-                return this;
-            }
-            
-            /**
-             * Configure whether or not override the origin method arguments.
-             *
-             * @param overrideArgs whether to override origin method arguments
-             * @return instance method point configurer
-             */
-            public InstanceMethodPointBuilder overrideArgs(final boolean overrideArgs) {
-                this.overrideArgs = overrideArgs;
-                return this;
-            }
-            
-            /**
-             * Build instance methods configuration.
-             *
-             * @return plugin advice builder
-             */
-            public Builder build() {
-                builder.instanceMethodPointcuts.add(new InstanceMethodPointcut(matcher, adviceClassName, overrideArgs));
-                return builder;
-            }
-        }
-        
-        /**
-         * Static method intercepting point configuration builder.
-         */
-        public static final class StaticMethodPointBuilder {
-            
-            private final Builder builder;
-            
-            private final ElementMatcher<? super MethodDescription> matcher;
-            
-            private String adviceClassName;
-            
-            private boolean overrideArgs;
-            
-            private StaticMethodPointBuilder(final Builder builder, final ElementMatcher<? super MethodDescription> matcher) {
-                this.builder = builder;
-                this.matcher = ElementMatchers.isStatic().and(matcher);
-            }
-            
-            /**
-             * Configure implementation for intercepting point.
-             *
-             * @param adviceClassName advice class name
-             * @return static method point configure builder
-             */
-            public StaticMethodPointBuilder implement(final String adviceClassName) {
-                this.adviceClassName = adviceClassName;
-                return this;
-            }
-            
-            /**
-             * Configure whether or not override the origin method arguments.
-             *
-             * @param overrideArgs whether to override origin method arguments
-             * @return static method point builder
-             */
-            public StaticMethodPointBuilder overrideArgs(final boolean overrideArgs) {
-                this.overrideArgs = overrideArgs;
-                return this;
-            }
-            
-            /**
-             * Build static methods configuration.
-             *
-             * @return builder
-             */
-            public Builder build() {
-                builder.staticMethodPointcuts.add(new StaticMethodPointcut(matcher, adviceClassName, overrideArgs));
-                return builder;
-            }
-        }
-        
-        /**
-         * Instance constructor intercepting point configuration builder.
-         */
-        public static final class ConstructorPointBuilder {
-            
-            private final Builder builder;
-            
-            private final ElementMatcher<? super MethodDescription> matcher;
-            
-            private String adviceClassName;
-            
-            private ConstructorPointBuilder(final Builder builder, final ElementMatcher<? super MethodDescription> matcher) {
-                this.builder = builder;
-                this.matcher = ElementMatchers.isConstructor().and(matcher);
-            }
-            
-            /**
-             * Configure implementation for intercepting point.
-             *
-             * @param adviceClassName advice class name
-             * @return constructor point builder
-             */
-            public ConstructorPointBuilder implement(final String adviceClassName) {
-                this.adviceClassName = adviceClassName;
-                return this;
-            }
-            
-            /**
-             * Build constructor point configuration.
-             *
-             * @return plugin advice builder
-             */
-            public Builder build() {
-                builder.constructorPointcuts.add(new ConstructorPointcut(matcher, adviceClassName));
-                return builder;
-            }
-        }
-    }
+    private final Collection<StaticMethodPointcut> staticMethodPointcuts = new LinkedList<>();
 }
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/StaticMethodPointcut.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/StaticMethodPointcut.java
index 26727905456..7746c805958 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/StaticMethodPointcut.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/pointcut/StaticMethodPointcut.java
@@ -34,4 +34,8 @@ public final class StaticMethodPointcut implements AgentPointcut {
     private final String adviceClassName;
     
     private final boolean overrideArgs;
+    
+    public StaticMethodPointcut(final ElementMatcher<? super MethodDescription> matcher, final String adviceClassName) {
+        this(matcher, adviceClassName, false);
+    }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/AbstractPluginDefinitionService.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/AbstractPluginDefinitionService.java
index 253ad09c00c..a3818fb59c3 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/AbstractPluginDefinitionService.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/AbstractPluginDefinitionService.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.agent.core.definition;
 
 import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts.Builder;
 import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 import java.util.Collection;
@@ -44,7 +43,7 @@ public abstract class AbstractPluginDefinitionService implements PluginDefinitio
     
     protected abstract void defineJdbcInterceptors();
     
-    protected final Builder defineInterceptor(final String targetClassName) {
+    protected final PluginPointcuts defineInterceptor(final String targetClassName) {
         return interceptorPointRegistry.getInterceptorPointBuilder(targetClassName);
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java
index 84a80635560..847b56a1d4d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java
@@ -18,19 +18,17 @@
 package org.apache.shardingsphere.agent.core.definition;
 
 import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts.Builder;
 
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 
 /**
  * Interceptor point registry.
  */
 public final class InterceptorPointRegistry {
     
-    private final Map<String, Builder> builders = new ConcurrentHashMap<>();
+    private final Map<String, PluginPointcuts> pointcutsMap = new ConcurrentHashMap<>();
     
     /**
      * Get interceptor point builder.
@@ -38,8 +36,8 @@ public final class InterceptorPointRegistry {
      * @param targetClassName target class name to be intercepted
      * @return interceptor point builder
      */
-    public Builder getInterceptorPointBuilder(final String targetClassName) {
-        return builders.computeIfAbsent(targetClassName, Builder::new);
+    public PluginPointcuts getInterceptorPointBuilder(final String targetClassName) {
+        return pointcutsMap.computeIfAbsent(targetClassName, PluginPointcuts::new);
     }
     
     /**
@@ -48,6 +46,6 @@ public final class InterceptorPointRegistry {
      * @return all interceptor points
      */
     public Collection<PluginPointcuts> getAllInterceptorPoints() {
-        return builders.values().stream().map(Builder::install).collect(Collectors.toList());
+        return pointcutsMap.values();
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
index cbdff7bf3a1..d5f313ac47d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
@@ -35,7 +35,6 @@ import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -151,7 +150,7 @@ public final class AgentPluginLoader implements PluginLoader {
     
     @Override
     public PluginPointcuts loadPluginInterceptorPoint(final TypeDescription typeDescription) {
-        return pointcuts.getOrDefault(typeDescription.getTypeName(), new PluginPointcuts("", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+        return pointcuts.getOrDefault(typeDescription.getTypeName(), new PluginPointcuts(""));
     }
     
     @Override
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
index f2f29157f2f..f634504ff15 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
@@ -23,18 +23,20 @@ import net.bytebuddy.agent.builder.AgentBuilder;
 import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
 import net.bytebuddy.dynamic.scaffold.TypeValidation;
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
 import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
-import org.apache.shardingsphere.agent.core.mock.advice.MockStaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
 import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundRepeatedAdvice;
+import org.apache.shardingsphere.agent.core.mock.advice.MockStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.mock.material.Material;
 import org.apache.shardingsphere.agent.core.mock.material.RepeatedAdviceMaterial;
 import org.apache.shardingsphere.agent.core.plugin.AdviceInstanceLoader;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts.Builder;
+import org.apache.shardingsphere.agent.pointcut.ConstructorPointcut;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
+import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -72,26 +74,9 @@ public final class ShardingSphereTransformerTest {
         objectPool.put(MockInstanceMethodAroundAdvice.class.getTypeName(), new MockInstanceMethodAroundAdvice());
         objectPool.put(MockStaticMethodAroundAdvice.class.getTypeName(), new MockStaticMethodAroundAdvice());
         Map<String, PluginPointcuts> pointcutsMap = new HashMap<>(2, 1);
-        PluginPointcuts pluginPointcuts = new Builder("org.apache.shardingsphere.agent.core.mock.material.Material")
-                .aroundInstanceMethod(ElementMatchers.named("mock"))
-                .implement(MockInstanceMethodAroundAdvice.class.getTypeName())
-                .build()
-                .aroundStaticMethod(ElementMatchers.named("staticMock"))
-                .implement(MockStaticMethodAroundAdvice.class.getTypeName())
-                .build()
-                .onConstructor(ElementMatchers.takesArguments(1))
-                .implement(MockConstructorAdvice.class.getTypeName())
-                .build()
-                .install();
+        PluginPointcuts pluginPointcuts = createPluginPointcuts();
         pointcutsMap.put(pluginPointcuts.getTargetClassName(), pluginPointcuts);
-        PluginPointcuts pluginPointcutsInTwice = new Builder("org.apache.shardingsphere.agent.core.mock.material.RepeatedAdviceMaterial")
-                .aroundInstanceMethod(ElementMatchers.named("mock"))
-                .implement(MockInstanceMethodAroundAdvice.class.getTypeName())
-                .build()
-                .aroundInstanceMethod(ElementMatchers.named("mock"))
-                .implement(MockInstanceMethodAroundRepeatedAdvice.class.getTypeName())
-                .build()
-                .install();
+        PluginPointcuts pluginPointcutsInTwice = createPluginPointcutsInTwice();
         pointcutsMap.put(pluginPointcutsInTwice.getTargetClassName(), pluginPointcutsInTwice);
         MemberAccessor accessor = Plugins.getMemberAccessor();
         accessor.set(PLUGIN_LOADER.getClass().getDeclaredField("pointcuts"), PLUGIN_LOADER, pointcutsMap);
@@ -106,6 +91,21 @@ public final class ShardingSphereTransformerTest {
                 .installOnByteBuddyAgent();
     }
     
+    private static PluginPointcuts createPluginPointcuts() {
+        PluginPointcuts result = new PluginPointcuts("org.apache.shardingsphere.agent.core.mock.material.Material");
+        result.getConstructorPointcuts().add(new ConstructorPointcut(ElementMatchers.takesArguments(1), MockConstructorAdvice.class.getTypeName()));
+        result.getInstanceMethodPointcuts().add(new InstanceMethodPointcut(ElementMatchers.named("mock"), MockInstanceMethodAroundAdvice.class.getTypeName()));
+        result.getStaticMethodPointcuts().add(new StaticMethodPointcut(ElementMatchers.named("staticMock"), MockStaticMethodAroundAdvice.class.getTypeName()));
+        return result;
+    }
+    
+    private static PluginPointcuts createPluginPointcutsInTwice() {
+        PluginPointcuts result = new PluginPointcuts("org.apache.shardingsphere.agent.core.mock.material.RepeatedAdviceMaterial");
+        result.getInstanceMethodPointcuts().add(new InstanceMethodPointcut(ElementMatchers.named("mock"), MockInstanceMethodAroundAdvice.class.getTypeName()));
+        result.getInstanceMethodPointcuts().add(new InstanceMethodPointcut(ElementMatchers.named("mock"), MockInstanceMethodAroundRepeatedAdvice.class.getTypeName()));
+        return result;
+    }
+    
     @Test
     public void assertInstanceMethod() {
         assertThat(new Material().mock(queue), is("invocation"));
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoaderTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoaderTest.java
index 6a0e168b100..b9849feefb0 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoaderTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoaderTest.java
@@ -25,8 +25,10 @@ import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAround
 import org.apache.shardingsphere.agent.core.mock.advice.MockStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.AdviceInstanceLoader;
 import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
+import org.apache.shardingsphere.agent.pointcut.ConstructorPointcut;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
 import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts.Builder;
+import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -60,17 +62,10 @@ public final class AgentPluginLoaderTest {
         objectPool.put(MockConstructorAdvice.class.getTypeName(), new MockConstructorAdvice());
         objectPool.put(MockInstanceMethodAroundAdvice.class.getTypeName(), new MockInstanceMethodAroundAdvice());
         objectPool.put(MockStaticMethodAroundAdvice.class.getTypeName(), new MockStaticMethodAroundAdvice());
-        PluginPointcuts pluginPointcuts = new Builder("org.apache.shardingsphere.agent.core.mock.material.Material")
-                .aroundInstanceMethod(ElementMatchers.named("mock"))
-                .implement(MockInstanceMethodAroundAdvice.class.getTypeName())
-                .build()
-                .aroundStaticMethod(ElementMatchers.named("staticMock"))
-                .implement(MockStaticMethodAroundAdvice.class.getTypeName())
-                .build()
-                .onConstructor(ElementMatchers.takesArguments(1))
-                .implement(MockConstructorAdvice.class.getTypeName())
-                .build()
-                .install();
+        PluginPointcuts pluginPointcuts = new PluginPointcuts("org.apache.shardingsphere.agent.core.mock.material.Material");
+        pluginPointcuts.getConstructorPointcuts().add(new ConstructorPointcut(ElementMatchers.takesArguments(1), MockConstructorAdvice.class.getTypeName()));
+        pluginPointcuts.getInstanceMethodPointcuts().add(new InstanceMethodPointcut(ElementMatchers.named("mock"), MockInstanceMethodAroundAdvice.class.getTypeName()));
+        pluginPointcuts.getStaticMethodPointcuts().add(new StaticMethodPointcut(ElementMatchers.named("staticMock"), MockStaticMethodAroundAdvice.class.getTypeName()));
         MemberAccessor accessor = Plugins.getMemberAccessor();
         accessor.set(PLUGIN_LOADER.getClass().getDeclaredField("pointcuts"), PLUGIN_LOADER, Collections.singletonMap(pluginPointcuts.getTargetClassName(), pluginPointcuts));
     }
diff --git a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingPluginDefinitionService.java b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingPluginDefinitionService.java
index 0563e9647c6..5941544ded2 100644
--- a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingPluginDefinitionService.java
+++ b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingPluginDefinitionService.java
@@ -18,8 +18,9 @@
 package org.apache.shardingsphere.agent.plugin.logging.base.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.plugin.logging.base.advice.MetaDataContextsFactoryAdvice;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.plugin.logging.base.advice.MetaDataContextsFactoryAdvice;
+import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
 
 /**
  * Base logging plugin definition service.
@@ -34,18 +35,14 @@ public final class BaseLoggingPluginDefinitionService extends AbstractPluginDefi
     
     @Override
     protected void defineProxyInterceptors() {
-        defineInterceptor(SCHEMA_METADATA_LOADER_CLASS)
-                .aroundStaticMethod(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)))
-                .implement(SCHEMA_METADATA_LOADER_ADVICE_CLASS)
-                .build();
+        defineInterceptor(SCHEMA_METADATA_LOADER_CLASS).getStaticMethodPointcuts()
+                .add(new StaticMethodPointcut(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)), SCHEMA_METADATA_LOADER_ADVICE_CLASS));
     }
     
     @Override
     protected void defineJdbcInterceptors() {
-        defineInterceptor(SCHEMA_METADATA_LOADER_CLASS)
-                .aroundStaticMethod(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)))
-                .implement(SCHEMA_METADATA_LOADER_ADVICE_CLASS)
-                .build();
+        defineInterceptor(SCHEMA_METADATA_LOADER_CLASS).getStaticMethodPointcuts()
+                .add(new StaticMethodPointcut(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)), SCHEMA_METADATA_LOADER_ADVICE_CLASS));
     }
     
     @Override
diff --git a/agent/plugins/metrics/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionService.java b/agent/plugins/metrics/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionService.java
index 81c905639af..501590ddf5d 100644
--- a/agent/plugins/metrics/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionService.java
+++ b/agent/plugins/metrics/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionService.java
@@ -18,11 +18,14 @@
 package org.apache.shardingsphere.agent.metrics.prometheus.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.pointcut.PluginPointcuts.Builder;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
 import org.apache.shardingsphere.agent.core.yaml.entity.Interceptor;
 import org.apache.shardingsphere.agent.core.yaml.entity.TargetPoint;
 import org.apache.shardingsphere.agent.core.yaml.swapper.InterceptorsYamlSwapper;
+import org.apache.shardingsphere.agent.pointcut.ConstructorPointcut;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.pointcut.PluginPointcuts;
+import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
 
 /**
  * Metrics plugin definition service.
@@ -35,17 +38,17 @@ public final class PrometheusPluginDefinitionService extends AbstractPluginDefin
             if (null == each.getTarget()) {
                 continue;
             }
-            Builder builder = defineInterceptor(each.getTarget());
+            PluginPointcuts pluginPointcuts = defineInterceptor(each.getTarget());
             if (null != each.getConstructAdvice() && !("".equals(each.getConstructAdvice()))) {
-                builder.onConstructor(ElementMatchers.isConstructor()).implement(each.getConstructAdvice()).build();
+                pluginPointcuts.getConstructorPointcuts().add(new ConstructorPointcut(ElementMatchers.isConstructor(), each.getConstructAdvice()));
             }
             String[] instancePoints = each.getPoints().stream().filter(i -> "instance".equals(i.getType())).map(TargetPoint::getName).toArray(String[]::new);
-            String[] staticPoints = each.getPoints().stream().filter(i -> "static".equals(i.getType())).map(TargetPoint::getName).toArray(String[]::new);
             if (instancePoints.length > 0) {
-                builder.aroundInstanceMethod(ElementMatchers.namedOneOf(instancePoints)).implement(each.getInstanceAdvice()).build();
+                pluginPointcuts.getInstanceMethodPointcuts().add(new InstanceMethodPointcut(ElementMatchers.namedOneOf(instancePoints), each.getInstanceAdvice()));
             }
+            String[] staticPoints = each.getPoints().stream().filter(i -> "static".equals(i.getType())).map(TargetPoint::getName).toArray(String[]::new);
             if (staticPoints.length > 0) {
-                builder.aroundStaticMethod(ElementMatchers.namedOneOf(staticPoints)).implement(each.getStaticAdvice()).build();
+                pluginPointcuts.getStaticMethodPointcuts().add(new StaticMethodPointcut(ElementMatchers.namedOneOf(staticPoints), each.getStaticAdvice()));
             }
         }
     }
diff --git a/agent/plugins/tracing/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionService.java b/agent/plugins/tracing/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionService.java
index e3cda34644e..c98ad53e231 100644
--- a/agent/plugins/tracing/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionService.java
+++ b/agent/plugins/tracing/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionService.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.jaeger.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
 
 /**
  * Jaeger plugin definition service.
@@ -47,18 +48,13 @@ public final class JaegerPluginDefinitionService extends AbstractPluginDefinitio
     
     @Override
     protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME))
-                .implement(COMMAND_EXECUTOR_TASK_ADVICE_CLASS)
-                .build();
-        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME))
-                .implement(SQL_PARSER_ENGINE_ADVICE_CLASS)
-                .build();
-        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))))
-                .implement(JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS)
-                .build();
+        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME), COMMAND_EXECUTOR_TASK_ADVICE_CLASS));
+        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME), SQL_PARSER_ENGINE_ADVICE_CLASS));
+        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))),
+                        JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS));
     }
     
     @Override
diff --git a/agent/plugins/tracing/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionService.java b/agent/plugins/tracing/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionService.java
index 8a108f47ffc..b3f85062cdb 100644
--- a/agent/plugins/tracing/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionService.java
+++ b/agent/plugins/tracing/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionService.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
 
 /**
  * OpenTelemetry plugin definition service.
@@ -47,18 +48,12 @@ public final class OpenTelemetryTracingPluginDefinitionService extends AbstractP
     
     @Override
     protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME))
-                .implement(COMMAND_EXECUTOR_TASK_ADVICE_CLASS)
-                .build();
-        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME))
-                .implement(SQL_PARSER_ENGINE_ADVICE_CLASS)
-                .build();
-        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))))
-                .implement(JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS)
-                .build();
+        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME), COMMAND_EXECUTOR_TASK_ADVICE_CLASS));
+        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME), SQL_PARSER_ENGINE_ADVICE_CLASS));
+        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS)), JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS));
     }
     
     @Override
diff --git a/agent/plugins/tracing/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionService.java b/agent/plugins/tracing/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionService.java
index 52bba28003e..cdd96fd8575 100644
--- a/agent/plugins/tracing/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionService.java
+++ b/agent/plugins/tracing/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionService.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.opentracing.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
 
 /**
  * Open tracing plugin definition service.
@@ -47,18 +48,13 @@ public final class OpenTracingPluginDefinitionService extends AbstractPluginDefi
     
     @Override
     protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME))
-                .implement(COMMAND_EXECUTOR_TASK_ADVICE_CLASS)
-                .build();
-        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME))
-                .implement(SQL_PARSER_ENGINE_ADVICE_CLASS)
-                .build();
-        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))))
-                .implement(JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS)
-                .build();
+        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME), COMMAND_EXECUTOR_TASK_ADVICE_CLASS));
+        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME), SQL_PARSER_ENGINE_ADVICE_CLASS));
+        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))),
+                        JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS));
     }
     
     @Override
diff --git a/agent/plugins/tracing/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionService.java b/agent/plugins/tracing/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionService.java
index 770dd6aac07..95f9e4a1b5c 100644
--- a/agent/plugins/tracing/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionService.java
+++ b/agent/plugins/tracing/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionService.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.zipkin.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
 
 /**
  * Zipkin plugin definition service.
@@ -47,18 +48,13 @@ public final class ZipkinPluginDefinitionService extends AbstractPluginDefinitio
     
     @Override
     protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME))
-                .implement(COMMAND_EXECUTOR_TASK_ADVICE_CLASS)
-                .build();
-        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME))
-                .implement(SQL_PARSER_ENGINE_ADVICE_CLASS)
-                .build();
-        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS)
-                .aroundInstanceMethod(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))))
-                .implement(JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS)
-                .build();
+        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(COMMAND_EXECUTOR_METHOD_NAME), COMMAND_EXECUTOR_TASK_ADVICE_CLASS));
+        defineInterceptor(SQL_PARSER_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(SQL_PARSER_ENGINE_METHOD_NAME), SQL_PARSER_ENGINE_ADVICE_CLASS));
+        defineInterceptor(JDBC_EXECUTOR_CALLBACK_ENGINE_ENHANCE_CLASS).getInstanceMethodPointcuts()
+                .add(new InstanceMethodPointcut(ElementMatchers.named(JDBC_EXECUTOR_METHOD_NAME).and(ElementMatchers.takesArgument(0, ElementMatchers.named(JDBC_EXECUTOR_UNIT_ENGINE_ENHANCE_CLASS))),
+                        JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS));
     }
     
     @Override