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

[shardingsphere] branch master updated: Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService (#22832)

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

duanzhengqiang 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 95cce584c6a Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService (#22832)
95cce584c6a is described below

commit 95cce584c6a2930081a697fed129bbbd87444c93
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Dec 12 19:52:56 2022 +0800

    Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService (#22832)
    
    * Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService
    
    * Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService
    
    * Use PluginDefinitionServiceEngine instead of AbstractPluginDefinitionService
---
 .../agent/spi/PluginDefinitionService.java         | 16 ++++-----
 ...ntRegistry.java => ClassPointcutsRegistry.java} |  8 ++---
 ...try.java => ClassPointcutsRegistryFactory.java} | 30 ++++++----------
 ...ice.java => PluginDefinitionServiceEngine.java} | 41 +++++++++++++---------
 .../agent/core/plugin/AgentPluginLoader.java       |  3 +-
 .../BaseLoggingPluginDefinitionService.java        | 15 ++++----
 .../PrometheusPluginDefinitionService.java         | 14 ++++----
 .../PrometheusPluginDefinitionServiceTest.java     |  7 ++--
 .../definition/JaegerPluginDefinitionService.java  | 16 +++++----
 .../JaegerPluginDefinitionServiceTest.java         |  7 ++--
 ...penTelemetryTracingPluginDefinitionService.java | 16 +++++----
 ...elemetryTracingPluginDefinitionServiceTest.java |  7 ++--
 .../OpenTracingPluginDefinitionService.java        | 16 +++++----
 .../OpenTracingPluginDefinitionServiceTest.java    |  7 ++--
 .../definition/ZipkinPluginDefinitionService.java  | 16 +++++----
 .../ZipkinPluginDefinitionServiceTest.java         |  7 ++--
 16 files changed, 127 insertions(+), 99 deletions(-)

diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/spi/PluginDefinitionService.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/spi/PluginDefinitionService.java
index e6db44294e9..9f5acf95f1b 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/spi/PluginDefinitionService.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/spi/PluginDefinitionService.java
@@ -17,20 +17,18 @@
 
 package org.apache.shardingsphere.agent.spi;
 
-import org.apache.shardingsphere.agent.pointcut.ClassPointcuts;
-
-import java.util.Collection;
-
 /**
  * Plugin definition service.
  */
 public interface PluginDefinitionService extends AgentSPI {
     
     /**
-     * Install class pointcuts.
-     *
-     * @param isEnhancedForProxy is enhanced for proxy
-     * @return installed class pointcuts
+     * Install Proxy Interceptors.
+     */
+    void installProxyInterceptors();
+    
+    /**
+     * Install JDBC Interceptors.
      */
-    Collection<ClassPointcuts> install(boolean isEnhancedForProxy);
+    void installJdbcInterceptors();
 }
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/ClassPointcutsRegistry.java
similarity index 86%
copy from agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java
copy to agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/ClassPointcutsRegistry.java
index 2e5fb6ac429..f76882b3cb1 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/ClassPointcutsRegistry.java
@@ -24,9 +24,9 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Interceptor point registry.
+ * Class pointcuts registry.
  */
-public final class InterceptorPointRegistry {
+public final class ClassPointcutsRegistry {
     
     private final Map<String, ClassPointcuts> pointcutsMap = new ConcurrentHashMap<>();
     
@@ -36,7 +36,7 @@ public final class InterceptorPointRegistry {
      * @param targetClassName target class name to be intercepted
      * @return class pointcuts
      */
-    public ClassPointcuts getInterceptorPointBuilder(final String targetClassName) {
+    public ClassPointcuts getClassPointcuts(final String targetClassName) {
         return pointcutsMap.computeIfAbsent(targetClassName, ClassPointcuts::new);
     }
     
@@ -45,7 +45,7 @@ public final class InterceptorPointRegistry {
      * 
      * @return all class pointcuts
      */
-    public Collection<ClassPointcuts> getAllInterceptorPoints() {
+    public Collection<ClassPointcuts> getAllClassPointcuts() {
         return pointcutsMap.values();
     }
 }
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/ClassPointcutsRegistryFactory.java
similarity index 56%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/InterceptorPointRegistry.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/ClassPointcutsRegistryFactory.java
index 2e5fb6ac429..0a909f443cc 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/ClassPointcutsRegistryFactory.java
@@ -17,35 +17,27 @@
 
 package org.apache.shardingsphere.agent.core.definition;
 
-import org.apache.shardingsphere.agent.pointcut.ClassPointcuts;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 
-import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Interceptor point registry.
+ * Class pointcuts registry factory.
  */
-public final class InterceptorPointRegistry {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ClassPointcutsRegistryFactory {
     
-    private final Map<String, ClassPointcuts> pointcutsMap = new ConcurrentHashMap<>();
+    private static final Map<String, ClassPointcutsRegistry> REGISTRIES = new ConcurrentHashMap<>();
     
     /**
-     * Get class pointcuts.
+     * Get class pointcuts registry.
      * 
-     * @param targetClassName target class name to be intercepted
-     * @return class pointcuts
+     * @param key registry key
+     * @return class pointcuts registry
      */
-    public ClassPointcuts getInterceptorPointBuilder(final String targetClassName) {
-        return pointcutsMap.computeIfAbsent(targetClassName, ClassPointcuts::new);
-    }
-    
-    /**
-     * Get all class pointcuts.
-     * 
-     * @return all class pointcuts
-     */
-    public Collection<ClassPointcuts> getAllInterceptorPoints() {
-        return pointcutsMap.values();
+    public static ClassPointcutsRegistry getRegistry(final String key) {
+        return REGISTRIES.computeIfAbsent(key, each -> new ClassPointcutsRegistry());
     }
 }
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/PluginDefinitionServiceEngine.java
similarity index 52%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/AbstractPluginDefinitionService.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/definition/PluginDefinitionServiceEngine.java
index 0e2598b7cb9..01b60990024 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/PluginDefinitionServiceEngine.java
@@ -17,33 +17,42 @@
 
 package org.apache.shardingsphere.agent.core.definition;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.agent.pointcut.ClassPointcuts;
 import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 import java.util.Collection;
 
 /**
- * Abstract plugin definition service.
+ * Plugin definition service engine.
  */
-public abstract class AbstractPluginDefinitionService implements PluginDefinitionService {
+@RequiredArgsConstructor
+public final class PluginDefinitionServiceEngine {
     
-    private final InterceptorPointRegistry interceptorPointRegistry = new InterceptorPointRegistry();
+    private final PluginDefinitionService pluginDefinitionService;
     
-    @Override
-    public final Collection<ClassPointcuts> install(final boolean isEnhancedForProxy) {
+    /**
+     * Get class pointcuts.
+     *
+     * @param targetClassName target class name
+     * @return class pointcuts
+     */
+    public ClassPointcuts getClassPointcuts(final String targetClassName) {
+        return ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getClassPointcuts(targetClassName);
+    }
+    
+    /**
+     * Install plugins.
+     * 
+     * @param isEnhancedForProxy is enhanced for proxy
+     * @return class pointcuts
+     */
+    public Collection<ClassPointcuts> install(final boolean isEnhancedForProxy) {
         if (isEnhancedForProxy) {
-            defineProxyInterceptors();
+            pluginDefinitionService.installProxyInterceptors();
         } else {
-            defineJdbcInterceptors();
+            pluginDefinitionService.installJdbcInterceptors();
         }
-        return interceptorPointRegistry.getAllInterceptorPoints();
-    }
-    
-    protected abstract void defineProxyInterceptors();
-    
-    protected abstract void defineJdbcInterceptors();
-    
-    protected final ClassPointcuts defineInterceptor(final String targetClassName) {
-        return interceptorPointRegistry.getInterceptorPointBuilder(targetClassName);
+        return ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts();
     }
 }
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 3c090ae2792..7ecdd91e65c 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
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.agent.config.AgentConfiguration;
 import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.config.path.AgentPathBuilder;
 import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
+import org.apache.shardingsphere.agent.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
 import org.apache.shardingsphere.agent.core.spi.PluginServiceLoader;
 import org.apache.shardingsphere.agent.pointcut.ClassPointcuts;
@@ -105,7 +106,7 @@ public final class AgentPluginLoader implements PluginLoader {
     }
     
     private void buildPluginInterceptorPointMap(final PluginDefinitionService pluginDefinitionService, final Map<String, ClassPointcuts> pointMap) {
-        pluginDefinitionService.install(isEnhancedForProxy).forEach(each -> {
+        new PluginDefinitionServiceEngine(pluginDefinitionService).install(isEnhancedForProxy).forEach(each -> {
             String target = each.getTargetClassName();
             if (pointMap.containsKey(target)) {
                 ClassPointcuts classPointcuts = pointMap.get(target);
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 5941544ded2..82219e19ec4 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,14 +18,16 @@
 package org.apache.shardingsphere.agent.plugin.logging.base.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
+import org.apache.shardingsphere.agent.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.plugin.logging.base.advice.MetaDataContextsFactoryAdvice;
 import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * Base logging plugin definition service.
  */
-public final class BaseLoggingPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class BaseLoggingPluginDefinitionService implements PluginDefinitionService {
     
     private static final String SCHEMA_METADATA_LOADER_CLASS = "org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory";
     
@@ -34,14 +36,15 @@ public final class BaseLoggingPluginDefinitionService extends AbstractPluginDefi
     private static final String SCHEMA_METADATA_LOADER_ADVICE_CLASS = MetaDataContextsFactoryAdvice.class.getName();
     
     @Override
-    protected void defineProxyInterceptors() {
-        defineInterceptor(SCHEMA_METADATA_LOADER_CLASS).getStaticMethodPointcuts()
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
+        engine.getClassPointcuts(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).getStaticMethodPointcuts()
+    public void installJdbcInterceptors() {
+        ClassPointcutsRegistryFactory.getRegistry(getType()).getClassPointcuts(SCHEMA_METADATA_LOADER_CLASS).getStaticMethodPointcuts()
                 .add(new StaticMethodPointcut(ElementMatchers.named(SCHEMA_METADATA_LOADER_METHOD_NAME).and(ElementMatchers.takesArguments(4)), SCHEMA_METADATA_LOADER_ADVICE_CLASS));
     }
     
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 96cfa53ff00..53a5fd6f144 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,27 +18,29 @@
 package org.apache.shardingsphere.agent.metrics.prometheus.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.definition.AbstractPluginDefinitionService;
+import org.apache.shardingsphere.agent.core.definition.PluginDefinitionServiceEngine;
 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.ClassPointcuts;
 import org.apache.shardingsphere.agent.pointcut.ConstructorPointcut;
 import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
-import org.apache.shardingsphere.agent.pointcut.ClassPointcuts;
 import org.apache.shardingsphere.agent.pointcut.StaticMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * Metrics plugin definition service.
  */
-public final class PrometheusPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class PrometheusPluginDefinitionService implements PluginDefinitionService {
     
     @Override
-    protected void defineProxyInterceptors() {
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
         for (Interceptor each : new InterceptorsYamlSwapper().unmarshal(getClass().getResourceAsStream("/prometheus/interceptors.yaml")).getInterceptors()) {
             if (null == each.getTarget()) {
                 continue;
             }
-            ClassPointcuts classPointcuts = defineInterceptor(each.getTarget());
+            ClassPointcuts classPointcuts = engine.getClassPointcuts(each.getTarget());
             if (null != each.getConstructAdvice() && !("".equals(each.getConstructAdvice()))) {
                 classPointcuts.getConstructorPointcuts().add(new ConstructorPointcut(ElementMatchers.isConstructor(), each.getConstructAdvice()));
             }
@@ -54,7 +56,7 @@ public final class PrometheusPluginDefinitionService extends AbstractPluginDefin
     }
     
     @Override
-    protected void defineJdbcInterceptors() {
+    public void installJdbcInterceptors() {
         // TODO add JDBC related interception
     }
     
diff --git a/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionServiceTest.java b/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionServiceTest.java
index 22f6d11ec0c..bb3a4e720bc 100644
--- a/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionServiceTest.java
+++ b/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusPluginDefinitionServiceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.metrics.prometheus.definition;
 
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public final class PrometheusPluginDefinitionServiceTest {
     
     @Test
-    public void assertInstall() {
-        assertThat(new PrometheusPluginDefinitionService().install(true).size(), is(5));
+    public void assertInstallProxyInterceptors() {
+        PrometheusPluginDefinitionService pluginDefinitionService = new PrometheusPluginDefinitionService();
+        pluginDefinitionService.installProxyInterceptors();
+        assertThat(ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts().size(), is(5));
     }
 }
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 c98ad53e231..dbcfac475f1 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
@@ -18,13 +18,14 @@
 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.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * Jaeger plugin definition service.
  */
-public final class JaegerPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class JaegerPluginDefinitionService implements PluginDefinitionService {
     
     private static final String COMMAND_EXECUTOR_TASK_ENHANCE_CLASS = "org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask";
     
@@ -47,18 +48,19 @@ public final class JaegerPluginDefinitionService extends AbstractPluginDefinitio
     private static final String JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS = "org.apache.shardingsphere.agent.plugin.tracing.jaeger.advice.JDBCExecutorCallbackAdvice";
     
     @Override
-    protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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
-    protected void defineJdbcInterceptors() {
+    public void installJdbcInterceptors() {
         // TODO add JDBC related interception
     }
     
diff --git a/agent/plugins/tracing/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionServiceTest.java b/agent/plugins/tracing/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionServiceTest.java
index d44e7d1a3fb..689cdcef3e8 100644
--- a/agent/plugins/tracing/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionServiceTest.java
+++ b/agent/plugins/tracing/jaeger/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/definition/JaegerPluginDefinitionServiceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.plugin.tracing.jaeger.definition;
 
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public final class JaegerPluginDefinitionServiceTest {
     
     @Test
-    public void assertInstall() {
-        assertThat(new JaegerPluginDefinitionService().install(true).size(), is(3));
+    public void assertInstallProxyInterceptors() {
+        JaegerPluginDefinitionService pluginDefinitionService = new JaegerPluginDefinitionService();
+        pluginDefinitionService.installProxyInterceptors();
+        assertThat(ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts().size(), is(3));
     }
 }
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 b3f85062cdb..4c5fa87e5be 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
@@ -18,13 +18,14 @@
 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.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * OpenTelemetry plugin definition service.
  */
-public final class OpenTelemetryTracingPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class OpenTelemetryTracingPluginDefinitionService implements PluginDefinitionService {
     
     private static final String COMMAND_EXECUTOR_TASK_ENHANCE_CLASS = "org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask";
     
@@ -47,17 +48,18 @@ public final class OpenTelemetryTracingPluginDefinitionService extends AbstractP
     private static final String JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS = "org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.JDBCExecutorCallbackAdvice";
     
     @Override
-    protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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
-    protected void defineJdbcInterceptors() {
+    public void installJdbcInterceptors() {
         // TODO add JDBC related interception
     }
     
diff --git a/agent/plugins/tracing/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionServiceTest.java b/agent/plugins/tracing/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionServiceTest.java
index c60acd2b561..b677a1497bd 100644
--- a/agent/plugins/tracing/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionServiceTest.java
+++ b/agent/plugins/tracing/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/definition/OpenTelemetryTracingPluginDefinitionServiceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.definition;
 
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public final class OpenTelemetryTracingPluginDefinitionServiceTest {
     
     @Test
-    public void assertInstall() {
-        assertThat(new OpenTelemetryTracingPluginDefinitionService().install(true).size(), is(3));
+    public void assertInstallProxyInterceptors() {
+        OpenTelemetryTracingPluginDefinitionService pluginDefinitionService = new OpenTelemetryTracingPluginDefinitionService();
+        pluginDefinitionService.installProxyInterceptors();
+        assertThat(ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts().size(), is(3));
     }
 }
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 cdd96fd8575..2dff8e5efa4 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
@@ -18,13 +18,14 @@
 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.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * Open tracing plugin definition service.
  */
-public final class OpenTracingPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class OpenTracingPluginDefinitionService implements PluginDefinitionService {
     
     private static final String COMMAND_EXECUTOR_TASK_ENHANCE_CLASS = "org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask";
     
@@ -47,18 +48,19 @@ public final class OpenTracingPluginDefinitionService extends AbstractPluginDefi
     private static final String JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS = "org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.JDBCExecutorCallbackAdvice";
     
     @Override
-    protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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
-    protected void defineJdbcInterceptors() {
+    public void installJdbcInterceptors() {
         // TODO add JDBC related interception
     }
     
diff --git a/agent/plugins/tracing/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionServiceTest.java b/agent/plugins/tracing/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionServiceTest.java
index b688377ddd3..ffd3a482a96 100644
--- a/agent/plugins/tracing/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionServiceTest.java
+++ b/agent/plugins/tracing/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/definition/OpenTracingPluginDefinitionServiceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.plugin.tracing.opentracing.definition;
 
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public final class OpenTracingPluginDefinitionServiceTest {
     
     @Test
-    public void assertInstall() {
-        assertThat(new OpenTracingPluginDefinitionService().install(true).size(), is(3));
+    public void assertInstallProxyInterceptors() {
+        OpenTracingPluginDefinitionService pluginDefinitionService = new OpenTracingPluginDefinitionService();
+        pluginDefinitionService.installProxyInterceptors();
+        assertThat(ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts().size(), is(3));
     }
 }
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 95f9e4a1b5c..4704f7577ff 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
@@ -18,13 +18,14 @@
 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.core.definition.PluginDefinitionServiceEngine;
 import org.apache.shardingsphere.agent.pointcut.InstanceMethodPointcut;
+import org.apache.shardingsphere.agent.spi.PluginDefinitionService;
 
 /**
  * Zipkin plugin definition service.
  */
-public final class ZipkinPluginDefinitionService extends AbstractPluginDefinitionService {
+public final class ZipkinPluginDefinitionService implements PluginDefinitionService {
     
     private static final String COMMAND_EXECUTOR_TASK_ENHANCE_CLASS = "org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask";
     
@@ -47,18 +48,19 @@ public final class ZipkinPluginDefinitionService extends AbstractPluginDefinitio
     private static final String JDBC_EXECUTOR_CALLBACK_ADVICE_CLASS = "org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice.JDBCExecutorCallbackAdvice";
     
     @Override
-    protected void defineProxyInterceptors() {
-        defineInterceptor(COMMAND_EXECUTOR_TASK_ENHANCE_CLASS).getInstanceMethodPointcuts()
+    public void installProxyInterceptors() {
+        PluginDefinitionServiceEngine engine = new PluginDefinitionServiceEngine(this);
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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()
+        engine.getClassPointcuts(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
-    protected void defineJdbcInterceptors() {
+    public void installJdbcInterceptors() {
         // TODO add JDBC related interception
     }
     
diff --git a/agent/plugins/tracing/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionServiceTest.java b/agent/plugins/tracing/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionServiceTest.java
index 5c70d7b0728..d7fd6729898 100644
--- a/agent/plugins/tracing/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionServiceTest.java
+++ b/agent/plugins/tracing/zipkin/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/definition/ZipkinPluginDefinitionServiceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.plugin.tracing.zipkin.definition;
 
+import org.apache.shardingsphere.agent.core.definition.ClassPointcutsRegistryFactory;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -25,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public final class ZipkinPluginDefinitionServiceTest {
     
     @Test
-    public void assertInstall() {
-        assertThat(new ZipkinPluginDefinitionService().install(true).size(), is(3));
+    public void assertInstallProxyInterceptors() {
+        ZipkinPluginDefinitionService pluginDefinitionService = new ZipkinPluginDefinitionService();
+        pluginDefinitionService.installProxyInterceptors();
+        assertThat(ClassPointcutsRegistryFactory.getRegistry(pluginDefinitionService.getType()).getAllClassPointcuts().size(), is(3));
     }
 }