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

menghaoran 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 a0e4d9a  refactor agent code (#8718)
a0e4d9a is described below

commit a0e4d9a1ada52938e5cc136e21594f77c390adac
Author: xiaoyu <[email protected]>
AuthorDate: Tue Dec 22 15:33:35 2020 +0800

    refactor agent code (#8718)
    
    * refactor agent code
    
    * refactor agent code
---
 .../agent/bootstrap/ShardingSphereAgent.java       |  20 ++--
 .../agent/core/ShardingSphereTransformer.java      |  94 -----------------
 .../AgentObjectPool.java}                          |   6 +-
 .../agent/core/config/AgentConfiguration.java      |   3 +-
 .../core/config/AgentConfigurationLoader.java      |   2 +-
 .../agent/core/{ => listener}/LoggingListener.java |   7 +-
 .../core/{common => path}/AgentPathBuilder.java    |   2 +-
 .../agent/core/plugin/PluginDefinition.java        |  93 ----------------
 .../core/plugin/definition/PluginDefinition.java   |  82 +++++++++++++++
 .../plugin/{ => loader}/AgentPluginLoader.java     | 117 +++++++++++----------
 .../core/plugin/point/ClassStaticMethodPoint.java  |  39 +------
 .../agent/core/plugin/point/ConstructorPoint.java  |  29 +----
 .../core/plugin/point/InstanceMethodPoint.java     |  39 +------
 .../PluginInterceptorPoint.java}                   |  70 +++---------
 .../{Service.java => service/BootService.java}     |  13 ++-
 .../plugin/{ => service}/ServiceSupervisor.java    |  31 +++---
 .../agent/core/spi/AgentServiceLoader.java         |   2 +-
 .../transformer/ShardingSphereTransformer.java     | 108 +++++++++++++++++++
 .../agent/metrics/api/MetricsProvider.java         |   4 +-
 .../api/prometheus/PrometheusMetricsRegister.java  |   4 +-
 .../shardingsphere/agent/metrics/api/BaseTest.java |   4 +-
 .../definition/MetricsPluginDefinition.java        |   2 +-
 .../tracing/jaeger/JaegerPluginDefinition.java     |   4 +-
 ...erService.java => JaegerTracerBootService.java} |  12 +--
 .../tracing/zipkin/ZipkinPluginDefinition.java     |   4 +-
 ...erService.java => ZipkinTracerBootService.java} |  11 +-
 26 files changed, 343 insertions(+), 459 deletions(-)

diff --git 
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
 
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index 10880aa..7d76319 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -21,12 +21,12 @@ import net.bytebuddy.ByteBuddy;
 import net.bytebuddy.agent.builder.AgentBuilder;
 import net.bytebuddy.dynamic.scaffold.TypeValidation;
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.LoggingListener;
-import org.apache.shardingsphere.agent.core.ShardingSphereTransformer;
+import org.apache.shardingsphere.agent.core.listener.LoggingListener;
+import 
org.apache.shardingsphere.agent.core.transformer.ShardingSphereTransformer;
 import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.ServiceSupervisor;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.service.ServiceSupervisor;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 
 import java.io.IOException;
 import java.lang.instrument.Instrumentation;
@@ -34,20 +34,20 @@ import java.lang.instrument.Instrumentation;
 /**
  * ShardingSphere agent.
  */
-public class ShardingSphereAgent {
+public final class ShardingSphereAgent {
     
     /**
      * Premain for instrumentation.
      *
-     * @param agentArgs agent args
+     * @param arguments arguments
      * @param instrumentation instrumentation
      * @throws IOException IO exception
      */
-    public static void premain(final String agentArgs, final Instrumentation 
instrumentation) throws IOException {
-        SingletonHolder.INSTANCE.put(AgentConfigurationLoader.load());
+    public static void premain(final String arguments, final Instrumentation 
instrumentation) throws IOException {
+        AgentObjectPool.INSTANCE.put(AgentConfigurationLoader.load());
         AgentPluginLoader agentPluginLoader = createAgentPluginLoader();
         setUpAgentBuilder(instrumentation, agentPluginLoader);
-        superviseServices(agentPluginLoader.getServices());
+        superviseServices(agentPluginLoader.getBootServices());
     }
     
     private static AgentPluginLoader createAgentPluginLoader() throws 
IOException {
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
deleted file mode 100644
index f416838..0000000
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereTransformer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.shardingsphere.agent.core;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
-import net.bytebuddy.description.type.TypeDescription;
-import net.bytebuddy.dynamic.DynamicType.Builder;
-import net.bytebuddy.implementation.FieldAccessor;
-import net.bytebuddy.implementation.MethodDelegation;
-import net.bytebuddy.implementation.SuperMethodCall;
-import net.bytebuddy.jar.asm.Opcodes;
-import net.bytebuddy.utility.JavaModule;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.PluginAdviceDefinition;
-import 
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorMethodInterceptor;
-import 
org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundInterceptor;
-import 
org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.advice.TargetObject;
-import 
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
-
-/**
- * Shardingsphere transformer.
- */
-@RequiredArgsConstructor
-@Slf4j
-public class ShardingSphereTransformer implements Transformer {
-    
-    private static final String SS_EXTRA_DATA = "_$EXTRA_DATA$_";
-    
-    private final AgentPluginLoader agentPluginLoader;
-    
-    @Override
-    public Builder<?> transform(final Builder<?> builder, final 
TypeDescription typeDescription, final ClassLoader classLoader, final 
JavaModule module) {
-        if (agentPluginLoader.containsType(typeDescription)) {
-            Builder<?> newBuilder = builder;
-            newBuilder = newBuilder.defineField(SS_EXTRA_DATA, Object.class, 
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
-                    .implement(TargetObject.class)
-                    .intercept(FieldAccessor.ofField(SS_EXTRA_DATA));
-            final PluginAdviceDefinition define = 
agentPluginLoader.loadPluginAdviceDefine(typeDescription);
-            for (ConstructorPoint point : define.getConstructorPoints()) {
-                try {
-                    final ConstructorMethodInterceptor interceptor = new 
ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
-                    newBuilder = 
newBuilder.constructor(point.getConstructorMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
-                    // CHECKSTYLE:OFF
-                } catch (final Throwable e) {
-                    // CHECKSTYLE:ON
-                    log.error("Failed to load advice class: {}", 
point.getAdvice(), e);
-                }
-            }
-            for (ClassStaticMethodPoint point : 
define.getClassStaticMethodPoints()) {
-                try {
-                    final StaticMethodAroundInterceptor interceptor = new 
StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
-                    newBuilder = 
newBuilder.method(point.getMethodsMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
-                    // CHECKSTYLE:OFF
-                } catch (final Throwable e) {
-                    // CHECKSTYLE:ON
-                    log.error("Failed to load advice class: {}", 
point.getAdvice(), e);
-                }
-            }
-            for (InstanceMethodPoint point : define.getInstanceMethodPoints()) 
{
-                try {
-                    final MethodAroundInterceptor interceptor = new 
MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(point.getAdvice()));
-                    newBuilder = 
newBuilder.method(point.getMethodMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
-                    // CHECKSTYLE:OFF
-                } catch (final Throwable e) {
-                    // CHECKSTYLE:ON
-                    log.error("Failed to load advice class: {}", 
point.getAdvice(), e);
-                }
-            }
-            return newBuilder;
-        }
-        return builder;
-    }
-}
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
similarity index 93%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
index 50428a9..34a1c9d 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/utils/SingletonHolder.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/cache/AgentObjectPool.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.utils;
+package org.apache.shardingsphere.agent.core.cache;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Singleton holder.
+ * Agent object pool.
  */
-public enum SingletonHolder {
+public enum AgentObjectPool {
     
     /**
      * Instance singleton.
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
index 077dd35..5fdc8e9 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfiguration.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.agent.core.config;
 
+import java.util.LinkedList;
 import lombok.Data;
 
 import java.util.List;
@@ -34,7 +35,7 @@ public class AgentConfiguration {
     
     private TracingConfiguration tracing;
     
-    private List<String> activatedPlugins;
+    private List<String> activatedPlugins = new LinkedList<>();
     
     @Data
     public static class MetricsConfiguration {
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
index 03f6366..72e5674 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/config/AgentConfigurationLoader.java
@@ -22,7 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
+import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
 import org.apache.shardingsphere.agent.core.yaml.YamlEngine;
 
 /**
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/listener/LoggingListener.java
similarity index 90%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/listener/LoggingListener.java
index 8c5a94b..f15bfac 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/LoggingListener.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/listener/LoggingListener.java
@@ -13,10 +13,9 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.shardingsphere.agent.core;
+package org.apache.shardingsphere.agent.core.listener;
 
 import lombok.extern.slf4j.Slf4j;
 import net.bytebuddy.agent.builder.AgentBuilder.Listener;
@@ -25,10 +24,10 @@ import net.bytebuddy.dynamic.DynamicType;
 import net.bytebuddy.utility.JavaModule;
 
 /**
- * Listener to log what is informed about events that occur during an 
instrumentation process.
+ * Logging listener what is informed about events that occur during an 
instrumentation process.
  */
 @Slf4j
-public class LoggingListener implements Listener {
+public final class LoggingListener implements Listener {
     
     @Override
     public void onDiscovery(final String typeName, final ClassLoader 
classLoader, final JavaModule module, final boolean loaded) {
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
similarity index 98%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
index 409cdf6..e69d619 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentPathBuilder.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/path/AgentPathBuilder.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.shardingsphere.agent.core.common;
+package org.apache.shardingsphere.agent.core.path;
 
 import java.io.File;
 import java.net.MalformedURLException;
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
deleted file mode 100644
index 9ae1aea..0000000
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginDefinition.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.shardingsphere.agent.core.plugin;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * Plugin definition.
- */
-public abstract class PluginDefinition {
-    
-    private final Map<String, PluginAdviceDefinition.Builder> defineMap = 
Maps.newHashMap();
-    
-    private final List<Class<? extends Service>> services = 
Lists.newArrayList();
-    
-    private final String pluginName;
-    
-    public PluginDefinition(final String pluginName) {
-        this.pluginName = pluginName;
-    }
-    
-    /**
-     * Define the plugin here.
-     */
-    protected abstract void define();
-    
-    protected PluginAdviceDefinition.Builder intercept(final String 
classNameOfTarget) {
-        if (defineMap.containsKey(classNameOfTarget)) {
-            return defineMap.get(classNameOfTarget);
-        }
-        PluginAdviceDefinition.Builder builder = 
PluginAdviceDefinition.intercept(classNameOfTarget);
-        defineMap.put(classNameOfTarget, builder);
-        return builder;
-    }
-    
-    /**
-     * Register service to agent.
-     *
-     * @param service the class of Service
-     */
-    protected void registerService(final Class<? extends Service> service) {
-        services.add(service);
-    }
-    
-    /**
-     * To build Plugin definition.
-     *
-     * @return configurations
-     */
-    public final List<PluginAdviceDefinition> build() {
-        define();
-        return 
defineMap.values().stream().map(PluginAdviceDefinition.Builder::install).collect(Collectors.toList());
-    }
-    
-    /**
-     * To get all services.
-     *
-     * @return all services
-     */
-    public List<Class<? extends Service>> getAllServices() {
-        return services;
-    }
-    
-    /**
-     * To get plugin name.
-     *
-     * @return plugin name
-     */
-    public String getPluginName() {
-        return pluginName;
-    }
-}
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
new file mode 100644
index 0000000..de474eb
--- /dev/null
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/definition/PluginDefinition.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.core.plugin.definition;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+
+/**
+ * Plugin definition.
+ */
+@RequiredArgsConstructor
+public abstract class PluginDefinition {
+    
+    private final Map<String, PluginInterceptorPoint.Builder> 
interceptorPointMap = Maps.newHashMap();
+    
+    private final List<Class<? extends BootService>> bootServices = 
Lists.newArrayList();
+    
+    @Getter
+    private final String pluginName;
+    
+    protected abstract void define();
+    
+    protected PluginInterceptorPoint.Builder intercept(final String 
classNameOfTarget) {
+        if (interceptorPointMap.containsKey(classNameOfTarget)) {
+            return interceptorPointMap.get(classNameOfTarget);
+        }
+        PluginInterceptorPoint.Builder builder = 
PluginInterceptorPoint.intercept(classNameOfTarget);
+        interceptorPointMap.put(classNameOfTarget, builder);
+        return builder;
+    }
+    
+    /**
+     * Register boot service to agent.
+     *
+     * @param service the class of Service
+     */
+    protected void registerService(final Class<? extends BootService> service) 
{
+        bootServices.add(service);
+    }
+    
+    /**
+     * Build collection of pluginInterceptorPoint.
+     *
+     * @return Collection of pluginInterceptorPoint
+     */
+    public final List<PluginInterceptorPoint> build() {
+        define();
+        return 
interceptorPointMap.values().stream().map(PluginInterceptorPoint.Builder::install).collect(Collectors.toList());
+    }
+    
+    /**
+     * To get all boot services.
+     *
+     * @return all boot services
+     */
+    public List<Class<? extends BootService>> getAllServices() {
+        return bootServices;
+    }
+}
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
similarity index 69%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
index fccc12e..2f7fd30 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AgentPluginLoader.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/loader/AgentPluginLoader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.loader;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
@@ -30,9 +30,13 @@ import lombok.extern.slf4j.Slf4j;
 import net.bytebuddy.description.type.TypeDescription;
 import net.bytebuddy.matcher.ElementMatcher;
 import net.bytebuddy.matcher.ElementMatcher.Junction;
-import org.apache.shardingsphere.agent.core.common.AgentPathBuilder;
+import org.apache.shardingsphere.agent.core.path.AgentPathBuilder;
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import 
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.plugin.service.ServiceSupervisor;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
@@ -69,11 +73,11 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
     
     private final ReentrantLock lock = new ReentrantLock();
     
-    private final List<UberJar> jars = Lists.newArrayList();
+    private final List<PluginJar> jars = Lists.newArrayList();
     
-    private final List<Service> services = Lists.newArrayList();
+    private final List<BootService> bootServices = Lists.newArrayList();
     
-    private Map<String, PluginAdviceDefinition> pluginDefineMap;
+    private Map<String, PluginInterceptorPoint> interceptorPointMap;
     
     private AgentPluginLoader() {
         super(AgentPluginLoader.class.getClassLoader());
@@ -105,17 +109,14 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
         if (null == jarFiles) {
             return;
         }
-        Map<String, PluginAdviceDefinition> pluginAdviceDefinitionMap = 
Maps.newHashMap();
-        List<String> activatedLists = 
SingletonHolder.INSTANCE.get(AgentConfiguration.class).getActivatedPlugins();
-        if (null == activatedLists) {
-            activatedLists = Lists.newArrayList();
-        }
+        Map<String, PluginInterceptorPoint> pointMap = Maps.newHashMap();
+        List<String> activatedLists = 
AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getActivatedPlugins();
         Set<String> activatedPlugins = Sets.newHashSet(activatedLists);
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         for (File jarFile : jarFiles) {
             outputStream.reset();
             JarFile jar = new JarFile(jarFile, true);
-            jars.add(new UberJar(jar, jarFile));
+            jars.add(new PluginJar(jar, jarFile));
             log.info("Loaded jar {}.", jarFile.getName());
             Attributes attributes = jar.getManifest().getMainAttributes();
             String entrypoint = attributes.getValue("Entrypoint");
@@ -129,33 +130,15 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
                 if (!activatedPlugins.isEmpty() && 
!activatedPlugins.contains(pluginDefinition.getPluginName())) {
                     continue;
                 }
-                pluginDefinition.build().forEach(plugin -> {
-                    String target = plugin.getClassNameOfTarget();
-                    if (pluginAdviceDefinitionMap.containsKey(target)) {
-                        PluginAdviceDefinition definition = 
pluginAdviceDefinitionMap.get(target);
-                        
definition.getConstructorPoints().addAll(plugin.getConstructorPoints());
-                        
definition.getInstanceMethodPoints().addAll(plugin.getInstanceMethodPoints());
-                        
definition.getClassStaticMethodPoints().addAll(plugin.getClassStaticMethodPoints());
-                    } else {
-                        pluginAdviceDefinitionMap.put(target, plugin);
-                    }
-                });
-                pluginDefinition.getAllServices().forEach(klass -> {
-                    try {
-                        services.add(klass.newInstance());
-                        // CHECKSTYLE:OFF
-                    } catch (final Throwable ex) {
-                        // CHECKSTYLE:ON
-                        log.error("Failed to create service instance, {}.", 
klass, ex);
-                    }
-                });
+                buildPluginInterceptorPointMap(pluginDefinition, pointMap);
+                buildBootServices(pluginDefinition);
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
                 log.error("Failed to load plugin definition, {}.", entrypoint, 
ex);
             }
         }
-        pluginDefineMap = ImmutableMap.<String, 
PluginAdviceDefinition>builder().putAll(pluginAdviceDefinitionMap).build();
+        interceptorPointMap = ImmutableMap.<String, 
PluginInterceptorPoint>builder().putAll(pointMap).build();
     }
     
     /**
@@ -168,7 +151,7 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
             
             @Override
             public boolean matches(final TypeDescription target) {
-                return pluginDefineMap.containsKey(target.getTypeName());
+                return interceptorPointMap.containsKey(target.getTypeName());
             }
             
             @Override
@@ -190,26 +173,26 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
      * @return contains when it is true
      */
     public boolean containsType(final TypeDescription typeDescription) {
-        return pluginDefineMap.containsKey(typeDescription.getTypeName());
+        return interceptorPointMap.containsKey(typeDescription.getTypeName());
     }
     
     /**
-     * Load the definition configuration by TypeDescription.
+     * Load plugin interceptor point by TypeDescription.
      *
      * @param typeDescription TypeDescription
-     * @return the plugin definition configurations
+     * @return plugin interceptor point
      */
-    public PluginAdviceDefinition loadPluginAdviceDefine(final TypeDescription 
typeDescription) {
-        return pluginDefineMap.getOrDefault(typeDescription.getTypeName(), 
PluginAdviceDefinition.createDefault());
+    public PluginInterceptorPoint loadPluginInterceptorPoint(final 
TypeDescription typeDescription) {
+        return interceptorPointMap.getOrDefault(typeDescription.getTypeName(), 
PluginInterceptorPoint.createDefault());
     }
     
     /**
-     * Get the supervisor of services.
+     * Get the supervisor of boot services.
      *
      * @return service supervisor
      */
-    public ServiceSupervisor getServices() {
-        return new 
ServiceSupervisor(ImmutableList.<Service>builder().addAll(services).build());
+    public ServiceSupervisor getBootServices() {
+        return new 
ServiceSupervisor(ImmutableList.<BootService>builder().addAll(bootServices).build());
     }
     
     /**
@@ -241,11 +224,11 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
     @Override
     protected Class<?> findClass(final String name) throws 
ClassNotFoundException {
         String path = classNameToPath(name);
-        for (UberJar jar : jars) {
-            ZipEntry entry = jar.jarFile.getEntry(path);
+        for (PluginJar each : jars) {
+            ZipEntry entry = each.jarFile.getEntry(path);
             if (Objects.nonNull(entry)) {
                 try {
-                    byte[] data = 
ByteStreams.toByteArray(jar.jarFile.getInputStream(entry));
+                    byte[] data = 
ByteStreams.toByteArray(each.jarFile.getInputStream(entry));
                     return defineClass(name, data, 0, data.length);
                 } catch (final IOException ex) {
                     log.error("Failed to load class {}.", name, ex);
@@ -262,11 +245,11 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
     @Override
     protected Enumeration<URL> findResources(final String name) {
         List<URL> resources = Lists.newArrayList();
-        for (UberJar jar : jars) {
-            JarEntry entry = jar.jarFile.getJarEntry(name);
+        for (PluginJar each : jars) {
+            JarEntry entry = each.jarFile.getJarEntry(name);
             if (Objects.nonNull(entry)) {
                 try {
-                    resources.add(new URL("jar:file:" + 
jar.sourcePath.getAbsolutePath() + "!/" + name));
+                    resources.add(new URL("jar:file:" + 
each.sourcePath.getAbsolutePath() + "!/" + name));
                 } catch (final MalformedURLException ignored) {
                 }
             }
@@ -276,11 +259,11 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
     
     @Override
     protected URL findResource(final String name) {
-        for (UberJar jar : jars) {
-            JarEntry entry = jar.jarFile.getJarEntry(name);
+        for (PluginJar each : jars) {
+            JarEntry entry = each.jarFile.getJarEntry(name);
             if (Objects.nonNull(entry)) {
                 try {
-                    return new URL("jar:file:" + 
jar.sourcePath.getAbsolutePath() + "!/" + name);
+                    return new URL("jar:file:" + 
each.sourcePath.getAbsolutePath() + "!/" + name);
                 } catch (final MalformedURLException ignored) {
                 }
             }
@@ -290,17 +273,43 @@ public final class AgentPluginLoader extends ClassLoader 
implements Closeable {
     
     @Override
     public void close() {
-        for (UberJar jar : jars) {
+        for (PluginJar each : jars) {
             try {
-                jar.jarFile.close();
+                each.jarFile.close();
             } catch (final IOException ex) {
                 log.error("close is ", ex);
             }
         }
     }
     
+    private void buildPluginInterceptorPointMap(final PluginDefinition 
pluginDefinition, final Map<String, PluginInterceptorPoint> pointMap) {
+        pluginDefinition.build().forEach(each -> {
+            String target = each.getClassNameOfTarget();
+            if (pointMap.containsKey(target)) {
+                PluginInterceptorPoint definition = pointMap.get(target);
+                
definition.getConstructorPoints().addAll(each.getConstructorPoints());
+                
definition.getInstanceMethodPoints().addAll(each.getInstanceMethodPoints());
+                
definition.getClassStaticMethodPoints().addAll(each.getClassStaticMethodPoints());
+            } else {
+                pointMap.put(target, each);
+            }
+        });
+    }
+    
+    private void buildBootServices(final PluginDefinition pluginDefinition) {
+        pluginDefinition.getAllServices().forEach(each -> {
+            try {
+                bootServices.add(each.newInstance());
+                // CHECKSTYLE:OFF
+            } catch (final Throwable ex) {
+                // CHECKSTYLE:ON
+                log.error("Failed to create service instance, {}.", each, ex);
+            }
+        });
+    }
+    
     @RequiredArgsConstructor
-    private static class UberJar {
+    private static class PluginJar {
         
         private final JarFile jarFile;
         
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
index 66abb0d..8e45f33 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ClassStaticMethodPoint.java
@@ -18,50 +18,21 @@
 
 package org.apache.shardingsphere.agent.core.plugin.point;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
 
 /**
  * Configuration of static method intercepting point.
  */
-public class ClassStaticMethodPoint {
+@Getter
+@RequiredArgsConstructor
+public final class ClassStaticMethodPoint {
     
     private final ElementMatcher<? super MethodDescription> matcher;
     
     private final String advice;
     
     private final boolean overrideArgs;
-    
-    public ClassStaticMethodPoint(final ElementMatcher<? super 
MethodDescription> matcher, final String advice, final boolean overrideArgs) {
-        this.matcher = matcher;
-        this.advice = advice;
-        this.overrideArgs = overrideArgs;
-    }
-    
-    /**
-     * To detect target method constraints.
-     *
-     * @return constraints
-     */
-    public ElementMatcher<? super MethodDescription> getMethodsMatcher() {
-        return matcher;
-    }
-    
-    /**
-     * To get the class name of advice.
-     *
-     * @return the class name of advice
-     */
-    public String getAdvice() {
-        return advice;
-    }
-    
-    /**
-     * To detect whether to override origin arguments.
-     *
-     * @return override if true
-     */
-    public boolean isOverrideArgs() {
-        return overrideArgs;
-    }
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
index 9282312..b111235 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/ConstructorPoint.java
@@ -18,38 +18,19 @@
 
 package org.apache.shardingsphere.agent.core.plugin.point;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
 
 /**
  * Configuration of constructor intercepting point.
  */
-public class ConstructorPoint {
+@Getter
+@RequiredArgsConstructor
+public final class ConstructorPoint {
     
     private final ElementMatcher<? super MethodDescription> matcher;
     
     private final String advice;
-    
-    public ConstructorPoint(final ElementMatcher<? super MethodDescription> 
matcher, final String advice) {
-        this.matcher = matcher;
-        this.advice = advice;
-    }
-    
-    /**
-     * To detect target constructor constraints.
-     *
-     * @return constraints
-     */
-    public ElementMatcher<? super MethodDescription> getConstructorMatcher() {
-        return matcher;
-    }
-    
-    /**
-     * To get the class name of advice.
-     *
-     * @return the class name of advice
-     */
-    public String getAdvice() {
-        return advice;
-    }
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
index e25502b..ad15360 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/InstanceMethodPoint.java
@@ -18,50 +18,21 @@
 
 package org.apache.shardingsphere.agent.core.plugin.point;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
 
 /**
  * Configuration of instance method intercepting point.
  */
-public class InstanceMethodPoint {
+@Getter
+@RequiredArgsConstructor
+public final class InstanceMethodPoint {
     
     private final ElementMatcher<? super MethodDescription> matcher;
     
     private final String advice;
     
     private final boolean overrideArgs;
-    
-    public InstanceMethodPoint(final ElementMatcher<? super MethodDescription> 
matcher, final String advice, final boolean overrideArgs) {
-        this.matcher = matcher;
-        this.advice = advice;
-        this.overrideArgs = overrideArgs;
-    }
-    
-    /**
-     * Detecting target method constraints but static methods.
-     *
-     * @return constraints
-     */
-    public ElementMatcher<? super MethodDescription> getMethodMatcher() {
-        return matcher;
-    }
-    
-    /**
-     * To get the class name of advice.
-     *
-     * @return the class name of advice
-     */
-    public String getAdvice() {
-        return advice;
-    }
-    
-    /**
-     * To detect whether to override origin arguments.
-     *
-     * @return override if true
-     */
-    public boolean isOverrideArgs() {
-        return overrideArgs;
-    }
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
similarity index 81%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
index ebb73c5..f09edb6 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginAdviceDefinition.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/point/PluginInterceptorPoint.java
@@ -13,34 +13,34 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.point;
 
 import com.google.common.collect.Lists;
 import java.util.Collections;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import net.bytebuddy.description.method.MethodDescription;
 import net.bytebuddy.matcher.ElementMatcher;
 import net.bytebuddy.matcher.ElementMatchers;
-import 
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
-import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
 
 import java.util.List;
 
 /**
- * Plugin advice definition.
+ * Plugin interceptor Point.
  *
  * <code>
- * PluginAdviceDefinition.intercept("Target.class")
+ * PluginInterceptorPoint.intercept("Target.class")
  * .onConstructor(ElementMatchers.any()).implement("Advice.class").build()
  * .method(ElementMatchers.named("greet").implement("Advice.class").build()
  * 
.staticMethod(ElementMatchers.named("of").implement("OfAdvice.class").build()
  * .install();
  * </code>
  */
-public final class PluginAdviceDefinition {
+@Getter
+@RequiredArgsConstructor
+public final class PluginInterceptorPoint {
     
     private final String classNameOfTarget;
     
@@ -50,32 +50,13 @@ public final class PluginAdviceDefinition {
     
     private final List<ClassStaticMethodPoint> classStaticMethodPoints;
     
-    private PluginAdviceDefinition(final String classNameOfTarget,
-                                   final List<ConstructorPoint> 
constructorPoints,
-                                   final List<InstanceMethodPoint> 
instanceMethodPoints,
-                                   final List<ClassStaticMethodPoint> 
classStaticMethodPoints) {
-        this.classNameOfTarget = classNameOfTarget;
-        this.constructorPoints = constructorPoints;
-        this.instanceMethodPoints = instanceMethodPoints;
-        this.classStaticMethodPoints = classStaticMethodPoints;
-    }
-    
     /**
      * Create default plugin advice definition.
      *
      * @return plugin advice definition
      */
-    public static PluginAdviceDefinition createDefault() {
-        return new PluginAdviceDefinition("", Collections.emptyList(), 
Collections.emptyList(), Collections.emptyList());
-    }
-    
-    /**
-     * Get class name of target.
-     *
-     * @return class name
-     */
-    public String getClassNameOfTarget() {
-        return classNameOfTarget;
+    public static PluginInterceptorPoint createDefault() {
+        return new PluginInterceptorPoint("", Collections.emptyList(), 
Collections.emptyList(), Collections.emptyList());
     }
     
     /**
@@ -89,33 +70,6 @@ public final class PluginAdviceDefinition {
     }
     
     /**
-     * To get static method point configurations.
-     *
-     * @return series of static method point configuration
-     */
-    public List<ClassStaticMethodPoint> getClassStaticMethodPoints() {
-        return classStaticMethodPoints;
-    }
-    
-    /**
-     * To get constructor point configurations.
-     *
-     * @return series of constructor point configuration
-     */
-    public List<ConstructorPoint> getConstructorPoints() {
-        return constructorPoints;
-    }
-    
-    /**
-     * To get instance point configurations.
-     *
-     * @return series of instance method point configuration
-     */
-    public List<InstanceMethodPoint> getInstanceMethodPoints() {
-        return instanceMethodPoints;
-    }
-    
-    /**
      * Plugin advice definition configuration builder.
      */
     public static final class Builder {
@@ -167,8 +121,8 @@ public final class PluginAdviceDefinition {
          *
          * @return plugin advice definition
          */
-        public PluginAdviceDefinition install() {
-            return new PluginAdviceDefinition(classNameOfTarget, 
constructorPoints, instanceMethodPoints, classStaticMethodPoints);
+        public PluginInterceptorPoint install() {
+            return new PluginInterceptorPoint(classNameOfTarget, 
constructorPoints, instanceMethodPoints, classStaticMethodPoints);
         }
         
         /**
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
similarity index 75%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
index da30bd1..16c7db7 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/Service.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/BootService.java
@@ -13,28 +13,27 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.service;
 
 /**
- * Service that the lifecycle is from the agent startup to shutdown.
+ * Boot service that the lifecycle is from the agent startup to shutdown.
  */
-public interface Service {
+public interface BootService {
     
     /**
-     * Setup the service, like to configure or to initial.
+     * Setup the boot service, like to configure or to initial.
      */
     void setup();
     
     /**
-     * Start up the service.
+     * Start up the boot service.
      */
     void start();
     
     /**
-     * Cleanup the service.
+     * Cleanup the boot service.
      */
     void cleanup();
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
similarity index 78%
rename from 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
rename to 
shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
index c357241..10f66ec 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/ServiceSupervisor.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/plugin/service/ServiceSupervisor.java
@@ -15,29 +15,29 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.plugin;
+package org.apache.shardingsphere.agent.core.plugin.service;
 
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
 
+/**
+ * Service supervisor.
+ */
 @Slf4j
+@RequiredArgsConstructor
 public final class ServiceSupervisor {
     
-    private final List<Service> services;
-    
-    public ServiceSupervisor(final List<Service> services) {
-        this.services = services;
-    }
-    
+    private final List<BootService> bootServices;
     
     /**
-     * Initial all services.
+     * Set up services.
      */
     public void setUpAllServices() {
-        services.forEach(service -> {
+        bootServices.forEach(each -> {
             try {
-                service.setup();
+                each.setup();
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
@@ -50,9 +50,9 @@ public final class ServiceSupervisor {
      * Start all services.
      */
     public void startAllServices() {
-        services.forEach(service -> {
+        bootServices.forEach(each -> {
             try {
-                service.start();
+                each.start();
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
@@ -62,12 +62,12 @@ public final class ServiceSupervisor {
     }
     
     /**
-     * Shutdown all services.
+     * Clean up all services.
      */
     public void cleanUpAllServices() {
-        services.forEach(service -> {
+        bootServices.forEach(each -> {
             try {
-                service.cleanup();
+                each.cleanup();
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
@@ -75,5 +75,4 @@ public final class ServiceSupervisor {
             }
         });
     }
-    
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
index 2c8293b..f6f08fa 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java
@@ -22,7 +22,7 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.concurrent.ConcurrentHashMap;
-import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
 
 /**
  * Agent service loader.
diff --git 
a/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
new file mode 100644
index 0000000..8d6bedd
--- /dev/null
+++ 
b/shardingsphere-agent/shardingsphere-agent-core/src/main/java/org/apache/shardingsphere/agent/core/transformer/ShardingSphereTransformer.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.core.transformer;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
+import net.bytebuddy.description.type.TypeDescription;
+import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.implementation.FieldAccessor;
+import net.bytebuddy.implementation.MethodDelegation;
+import net.bytebuddy.implementation.SuperMethodCall;
+import net.bytebuddy.jar.asm.Opcodes;
+import net.bytebuddy.utility.JavaModule;
+import org.apache.shardingsphere.agent.core.plugin.loader.AgentPluginLoader;
+import 
org.apache.shardingsphere.agent.core.plugin.point.PluginInterceptorPoint;
+import 
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorMethodInterceptor;
+import 
org.apache.shardingsphere.agent.core.plugin.advice.MethodAroundInterceptor;
+import 
org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.advice.TargetObject;
+import 
org.apache.shardingsphere.agent.core.plugin.point.ClassStaticMethodPoint;
+import org.apache.shardingsphere.agent.core.plugin.point.ConstructorPoint;
+import org.apache.shardingsphere.agent.core.plugin.point.InstanceMethodPoint;
+
+/**
+ * Shardingsphere transformer.
+ */
+@Slf4j
+@RequiredArgsConstructor
+public final class ShardingSphereTransformer implements Transformer {
+    
+    private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
+    
+    private final AgentPluginLoader agentPluginLoader;
+    
+    @Override
+    public Builder<?> transform(final Builder<?> builder, final 
TypeDescription typeDescription, final ClassLoader classLoader, final 
JavaModule module) {
+        if (agentPluginLoader.containsType(typeDescription)) {
+            Builder<?> newBuilder = builder;
+            newBuilder = newBuilder.defineField(EXTRA_DATA, Object.class, 
Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE)
+                    .implement(TargetObject.class)
+                    .intercept(FieldAccessor.ofField(EXTRA_DATA));
+            final PluginInterceptorPoint pluginInterceptorPoint = 
agentPluginLoader.loadPluginInterceptorPoint(typeDescription);
+            newBuilder = interceptorConstructorPoint(pluginInterceptorPoint, 
newBuilder);
+            newBuilder = 
interceptorClassStaticMethodPoint(pluginInterceptorPoint, newBuilder);
+            newBuilder = 
interceptorInstanceMethodPoint(pluginInterceptorPoint, newBuilder);
+            return newBuilder;
+        }
+        return builder;
+    }
+    
+    private Builder<?> interceptorConstructorPoint(final 
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+        for (ConstructorPoint each : 
pluginInterceptorPoint.getConstructorPoints()) {
+            try {
+                ConstructorMethodInterceptor interceptor = new 
ConstructorMethodInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+                return 
builder.constructor(each.getMatcher()).intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(interceptor)));
+                // CHECKSTYLE:OFF
+            } catch (final Throwable ex) {
+                // CHECKSTYLE:ON
+                log.error("Failed to load advice class: {}", each.getAdvice(), 
ex);
+            }
+        }
+        return builder;
+    }
+    
+    private Builder<?> interceptorClassStaticMethodPoint(final 
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+        for (ClassStaticMethodPoint each : 
pluginInterceptorPoint.getClassStaticMethodPoints()) {
+            try {
+                StaticMethodAroundInterceptor interceptor = new 
StaticMethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+                return 
builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+                // CHECKSTYLE:OFF
+            } catch (final Throwable ex) {
+                // CHECKSTYLE:ON
+                log.error("Failed to load advice class: {}", each.getAdvice(), 
ex);
+            }
+        }
+        return builder;
+    }
+    
+    private Builder<?> interceptorInstanceMethodPoint(final 
PluginInterceptorPoint pluginInterceptorPoint, final Builder<?> builder) {
+        for (InstanceMethodPoint each : 
pluginInterceptorPoint.getInstanceMethodPoints()) {
+            try {
+                MethodAroundInterceptor interceptor = new 
MethodAroundInterceptor(agentPluginLoader.getOrCreateInstance(each.getAdvice()));
+                return 
builder.method(each.getMatcher()).intercept(MethodDelegation.withDefaultConfiguration().to(interceptor));
+                // CHECKSTYLE:OFF
+            } catch (final Throwable ex) {
+                // CHECKSTYLE:ON
+                log.error("Failed to load advice class: {}", each.getAdvice(), 
ex);
+            }
+        }
+        return builder;
+    }
+}
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
index aeab546..d401a7b 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/MetricsProvider.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.agent.metrics.api;
 
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
 import org.apache.shardingsphere.agent.core.spi.AgentTypedSPIRegistry;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 
 /**
  * The enum metrics provider.
@@ -34,7 +34,7 @@ public enum MetricsProvider {
     private static MetricsRegisterFactory metricRegisterFactory;
     
     static {
-        AgentConfiguration.MetricsConfiguration metricsConfiguration = 
SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+        AgentConfiguration.MetricsConfiguration metricsConfiguration = 
AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getMetrics();
         metricRegisterFactory = 
AgentTypedSPIRegistry.getRegisteredService(MetricsRegisterFactory.class, 
metricsConfiguration.getType());
     }
     
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
index f06f7bb..9c54508 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/main/java/org/apache/shardingsphere/agent/metrics/api/prometheus/PrometheusMetricsRegister.java
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 import org.apache.shardingsphere.agent.metrics.api.MetricsRegister;
 
 /**
@@ -44,7 +44,7 @@ public final class PrometheusMetricsRegister implements 
MetricsRegister {
     
     private static final Map<String, Histogram> HISTOGRAM_MAP = new 
ConcurrentHashMap<>();
     
-    private final AgentConfiguration.MetricsConfiguration metricsConfiguration 
= SingletonHolder.INSTANCE.get(AgentConfiguration.class).getMetrics();
+    private final AgentConfiguration.MetricsConfiguration metricsConfiguration 
= AgentObjectPool.INSTANCE.get(AgentConfiguration.class).getMetrics();
     
     private HTTPServer httpServer;
     
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
index 14eee03..08e19c8 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-api/src/test/java/org/apache/shardingsphere/agent/metrics/api/BaseTest.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import java.net.URL;
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
 import org.apache.shardingsphere.agent.core.config.AgentConfigurationLoader;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 import org.junit.Before;
 
 public class BaseTest {
@@ -32,7 +32,7 @@ public class BaseTest {
     public void assertLoad() throws IOException {
         System.setProperty("agent-path", getResourceUrl());
         AgentConfiguration configuration = AgentConfigurationLoader.load();
-        SingletonHolder.INSTANCE.put(configuration);
+        AgentObjectPool.INSTANCE.put(configuration);
     }
     
     private static String getResourceUrl() {
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
index 2161e21..d3d6530 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-bootstrap/src/main/java/org/apache/shardingsphere/agent/metrics/bootstrap/definition/MetricsPluginDefinition.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.metrics.bootstrap.definition;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
 import org.apache.shardingsphere.agent.metrics.api.MetricsProvider;
 import org.apache.shardingsphere.agent.metrics.bootstrap.MethodNameConstant;
 
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
index c122484..2509e84 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerPluginDefinition.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.plugin.tracing.jaeger;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
 
 /**
  * Jaeger plugin definition.
@@ -31,7 +31,7 @@ public class JaegerPluginDefinition extends PluginDefinition {
     
     @Override
     protected void define() {
-        registerService(JaegerTracerService.class);
+        registerService(JaegerTracerBootService.class);
         
         
intercept("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask")
                 .aroundInstanceMethod(ElementMatchers.named("executeCommand"))
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
similarity index 87%
rename from 
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
rename to 
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
index 9d88fec..0589eb6 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerService.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/JaegerTracerBootService.java
@@ -20,17 +20,17 @@ package 
org.apache.shardingsphere.agent.plugin.tracing.jaeger;
 import io.jaegertracing.Configuration;
 import io.opentracing.util.GlobalTracer;
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.Service;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 
 /**
- * Jaeger tracer service.
+ * Jaeger tracer boot service.
  */
-public class JaegerTracerService implements Service {
+public final class JaegerTracerBootService implements BootService {
     
     @Override
     public void setup() {
-        AgentConfiguration configuration = 
SingletonHolder.INSTANCE.get(AgentConfiguration.class);
+        AgentConfiguration configuration = 
AgentObjectPool.INSTANCE.get(AgentConfiguration.class);
         AgentConfiguration.TracingConfiguration tracingConfiguration = 
configuration.getTracing();
         tracingConfiguration.getExtra().forEach(System::setProperty);
         Configuration.SamplerConfiguration samplerConfig = 
Configuration.SamplerConfiguration.fromEnv();
@@ -48,11 +48,9 @@ public class JaegerTracerService implements Service {
     
     @Override
     public void start() {
-    
     }
     
     @Override
     public void cleanup() {
-    
     }
 }
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
index 98dab67..1f61576 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinPluginDefinition.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.plugin.tracing.zipkin;
 
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.plugin.PluginDefinition;
+import org.apache.shardingsphere.agent.core.plugin.definition.PluginDefinition;
 
 /**
  * Zipkin plugin definition.
@@ -31,7 +31,7 @@ public class ZipkinPluginDefinition extends PluginDefinition {
     
     @Override
     protected void define() {
-        registerService(ZipkinTracerService.class);
+        registerService(ZipkinTracerBootService.class);
         
         
intercept("org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask")
                 .aroundInstanceMethod(ElementMatchers.named("executeCommand"))
diff --git 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
similarity index 86%
rename from 
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
rename to 
shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
index 0e722dc..faad7ed 100644
--- 
a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerService.java
+++ 
b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-tracing/shardingsphere-agent-tracing-zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/ZipkinTracerBootService.java
@@ -19,15 +19,15 @@ package 
org.apache.shardingsphere.agent.plugin.tracing.zipkin;
 
 import brave.Tracing;
 import org.apache.shardingsphere.agent.core.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.plugin.Service;
-import org.apache.shardingsphere.agent.core.utils.SingletonHolder;
+import org.apache.shardingsphere.agent.core.plugin.service.BootService;
+import org.apache.shardingsphere.agent.core.cache.AgentObjectPool;
 import zipkin2.reporter.brave.AsyncZipkinSpanHandler;
 import zipkin2.reporter.okhttp3.OkHttpSender;
 
 /**
- * Zipkin tracer service.
+ * Zipkin tracer boot service.
  */
-public class ZipkinTracerService implements Service {
+public final class ZipkinTracerBootService implements BootService {
     
     private AsyncZipkinSpanHandler zipkinSpanHandler;
     
@@ -37,7 +37,7 @@ public class ZipkinTracerService implements Service {
 
     @Override
     public void setup() {
-        AgentConfiguration configuration = 
SingletonHolder.INSTANCE.get(AgentConfiguration.class);
+        AgentConfiguration configuration = 
AgentObjectPool.INSTANCE.get(AgentConfiguration.class);
         AgentConfiguration.TracingConfiguration tracingConfiguration = 
configuration.getTracing();
         sender = OkHttpSender.create("http://"; + 
tracingConfiguration.getAgentHost() + ":" + 
tracingConfiguration.getAgentPort());
         zipkinSpanHandler = AsyncZipkinSpanHandler.create(sender);
@@ -54,5 +54,4 @@ public class ZipkinTracerService implements Service {
         zipkinSpanHandler.close();
         sender.close();
     }
-
 }

Reply via email to