You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/12/13 17:06:07 UTC

[shardingsphere] branch master updated: Refactor packages of agent-core (#22859)

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

zhaojinchao 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 5c7ee9a59ab Refactor packages of agent-core (#22859)
5c7ee9a59ab is described below

commit 5c7ee9a59ab00e4d8424787893d94e587ded80a6
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Dec 14 01:05:51 2022 +0800

    Refactor packages of agent-core (#22859)
    
    * Refactor packages of agent-core
    
    * Remove useless AgentServiceProviderNotFoundException
    
    * Refactor AgentClassLoader
    
    * Refactor AgentClassLoader
    
    * For code format
    
    * Clean codes
    
    * Remove useless PluginLoader
    
    * clean code
---
 .../agent/bootstrap/ShardingSphereAgent.java       |  10 +-
 .../{common => classloader}/AgentClassLoader.java  |  85 +++++++-------
 .../agent/core/config/path/AgentPathBuilder.java   |   1 -
 .../AgentServiceProviderNotFoundException.java     |  30 -----
 .../agent/core/logging/LoggerFactory.java          |   2 +-
 .../listener => logging}/LoggingListener.java      |   3 +-
 .../agent/core/plugin/AdviceInstanceLoader.java    |   6 +-
 .../agent/core/plugin/AgentPluginLoader.java       |  37 ++++--
 .../core/plugin/PluginBootServiceManager.java      |   2 +-
 .../agent/core/plugin/PluginLoader.java            |  50 ---------
 .../composed/ComposedConstructorAdvice.java}       |   6 +-
 .../ComposedInstanceMethodAroundAdvice.java}       |   6 +-
 .../ComposedStaticMethodAroundAdvice.java}         |   6 +-
 .../compose/ComposedConstructorInterceptor.java    |   4 +-
 .../ComposedInstanceMethodAroundInterceptor.java   |   4 +-
 ...posedInstanceMethodInterceptorArgsOverride.java |   4 +-
 .../ComposedStaticMethodAroundInterceptor.java     |   4 +-
 ...omposedStaticMethodInterceptorArgsOverride.java |   4 +-
 .../AgentTransformationPoint.java}                 |   6 +-
 .../AgentTransformer.java}                         | 125 ++++++++++-----------
 .../interceptor/ConstructorInterceptorTest.java    |   2 +-
 .../AgentTransformerTest.java}                     |  12 +-
 .../advice/ComposedConstructorAdviceTest.java}     |   9 +-
 .../ComposedStaticMethodAroundAdviceTest.java}     |   9 +-
 24 files changed, 186 insertions(+), 241 deletions(-)

diff --git a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
index aa2f61d744f..af2448eddf0 100644
--- a/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
+++ b/agent/bootstrap/src/main/java/org/apache/shardingsphere/agent/bootstrap/ShardingSphereAgent.java
@@ -25,9 +25,9 @@ import net.bytebuddy.dynamic.scaffold.TypeValidation;
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.config.AgentConfiguration;
 import org.apache.shardingsphere.agent.config.PluginConfiguration;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.ShardingSphereTransformer;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
+import org.apache.shardingsphere.agent.core.transformer.AgentTransformer;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.config.loader.AgentConfigurationLoader;
 import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
 import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
@@ -72,13 +72,13 @@ public final class ShardingSphereAgent {
                 .ignore(ElementMatchers.isSynthetic())
                 .or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
         agentBuilder.type(pluginLoader.typeMatcher())
-                .transform(new ShardingSphereTransformer(pluginLoader))
+                .transform(new AgentTransformer(pluginLoader))
                 .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
                 .with(new LoggingListener()).installOn(instrumentation);
     }
     
     private static void setupPluginBootService(final Map<String, PluginConfiguration> pluginConfigs) {
-        PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getDefaultPluginClassloader(), true);
+        PluginBootServiceManager.startAllServices(pluginConfigs, AgentClassLoader.getClassLoader(), true);
         Runtime.getRuntime().addShutdownHook(new Thread(PluginBootServiceManager::closeAllServices));
     }
     
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
similarity index 58%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
index 1b2609caa98..4f8b6d8240c 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/common/AgentClassLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/classloader/AgentClassLoader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.common;
+package org.apache.shardingsphere.agent.core.classloader;
 
 import com.google.common.io.ByteStreams;
 import lombok.Getter;
@@ -29,7 +29,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.LinkedList;
-import java.util.Objects;
+import java.util.Optional;
 import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.Manifest;
@@ -45,7 +45,7 @@ public final class AgentClassLoader extends ClassLoader {
     }
     
     @Getter
-    private static volatile AgentClassLoader defaultPluginClassloader;
+    private static volatile AgentClassLoader classLoader;
     
     private final Collection<PluginJar> pluginJars;
     
@@ -55,15 +55,15 @@ public final class AgentClassLoader extends ClassLoader {
     }
     
     /**
-     * Initialize default plugin class loader.
+     * Initialize agent class loader.
      * 
      * @param pluginJars plugin jars
      */
-    public static void initDefaultPluginClassLoader(final Collection<PluginJar> pluginJars) {
-        if (null == defaultPluginClassloader) {
+    public static void init(final Collection<PluginJar> pluginJars) {
+        if (null == classLoader) {
             synchronized (AgentClassLoader.class) {
-                if (null == defaultPluginClassloader) {
-                    defaultPluginClassloader = new AgentClassLoader(AgentPluginLoader.class.getClassLoader(), pluginJars);
+                if (null == classLoader) {
+                    classLoader = new AgentClassLoader(AgentPluginLoader.class.getClassLoader(), pluginJars);
                 }
             }
         }
@@ -71,35 +71,38 @@ public final class AgentClassLoader extends ClassLoader {
     
     @Override
     protected Class<?> findClass(final String name) throws ClassNotFoundException {
-        String path = classNameToPath(name);
+        String path = convertClassNameToPath(name);
         for (PluginJar each : pluginJars) {
             ZipEntry entry = each.getJarFile().getEntry(path);
-            if (Objects.isNull(entry)) {
+            if (null == entry) {
                 continue;
             }
             try {
-                int index = name.lastIndexOf('.');
-                if (index != -1) {
-                    String packageName = name.substring(0, index);
-                    definePackageInternal(packageName, each.getJarFile().getManifest());
-                }
-                byte[] data = ByteStreams.toByteArray(each.getJarFile().getInputStream(entry));
-                return defineClass(name, data, 0, data.length);
+                definePackage(name, each);
+                return defineClass(name, each, entry);
             } catch (final IOException ex) {
-                throw new ClassNotFoundException(String.format("Class name is %s not found", name));
+                throw new ClassNotFoundException(name);
             }
         }
-        throw new ClassNotFoundException(String.format("Class name is %s not found", name));
+        throw new ClassNotFoundException(name);
     }
     
-    private String classNameToPath(final String className) {
+    private String convertClassNameToPath(final String className) {
         return String.join("", className.replace(".", "/"), ".class");
     }
     
-    private void definePackageInternal(final String packageName, final Manifest manifest) {
-        if (null != getPackage(packageName)) {
+    private void definePackage(final String className, final PluginJar pluginJar) throws IOException {
+        int index = className.lastIndexOf('.');
+        if (-1 == index) {
             return;
         }
+        String packageName = className.substring(0, index);
+        if (null == getPackage(packageName)) {
+            definePackage(packageName, pluginJar.getJarFile().getManifest());
+        }
+    }
+    
+    private void definePackage(final String packageName, final Manifest manifest) {
         Attributes attributes = manifest.getMainAttributes();
         String specTitle = attributes.getValue(Attributes.Name.SPECIFICATION_TITLE);
         String specVersion = attributes.getValue(Attributes.Name.SPECIFICATION_VERSION);
@@ -110,32 +113,34 @@ public final class AgentClassLoader extends ClassLoader {
         definePackage(packageName, specTitle, specVersion, specVendor, implTitle, implVersion, implVendor, null);
     }
     
+    private Class<?> defineClass(final String name, final PluginJar each, final ZipEntry entry) throws IOException {
+        byte[] data = ByteStreams.toByteArray(each.getJarFile().getInputStream(entry));
+        return defineClass(name, data, 0, data.length);
+    }
+    
     @Override
     protected Enumeration<URL> findResources(final String name) {
-        Collection<URL> resources = new LinkedList<>();
+        Collection<URL> result = new LinkedList<>();
         for (PluginJar each : pluginJars) {
-            JarEntry entry = each.getJarFile().getJarEntry(name);
-            if (Objects.nonNull(entry)) {
-                try {
-                    resources.add(new URL(String.format("jar:file:%s!/%s", each.getSourcePath().getAbsolutePath(), name)));
-                } catch (final MalformedURLException ignored) {
-                }
-            }
+            findResource(name, each).ifPresent(result::add);
         }
-        return Collections.enumeration(resources);
+        return Collections.enumeration(result);
     }
     
     @Override
     protected URL findResource(final String name) {
-        for (PluginJar each : pluginJars) {
-            JarEntry entry = each.getJarFile().getJarEntry(name);
-            if (Objects.nonNull(entry)) {
-                try {
-                    return new URL(String.format("jar:file:%s!/%s", each.getSourcePath().getAbsolutePath(), name));
-                } catch (final MalformedURLException ignored) {
-                }
-            }
+        return pluginJars.stream().map(each -> findResource(name, each)).filter(Optional::isPresent).findFirst().map(Optional::get).orElse(null);
+    }
+    
+    private Optional<URL> findResource(final String name, final PluginJar pluginJar) {
+        JarEntry entry = pluginJar.getJarFile().getJarEntry(name);
+        if (null == entry) {
+            return Optional.empty();
+        }
+        try {
+            return Optional.of(new URL(String.format("jar:file:%s!/%s", pluginJar.getSourcePath().getAbsolutePath(), name)));
+        } catch (final MalformedURLException ignored) {
         }
-        return null;
+        return Optional.empty();
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
index b22aad808b2..3ba6355827a 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/config/path/AgentPathBuilder.java
@@ -82,5 +82,4 @@ public final class AgentPathBuilder {
     private static File buildAgentConfigPath() {
         return new File(String.join("/", agentPath.getPath(), "conf"));
     }
-    
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
deleted file mode 100644
index 5e2c93d93ed..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/exception/AgentServiceProviderNotFoundException.java
+++ /dev/null
@@ -1,30 +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.exception;
-
-/**
- * Agent service provider not found exception.
- */
-public final class AgentServiceProviderNotFoundException extends RuntimeException {
-    
-    private static final long serialVersionUID = -3730257541332863235L;
-    
-    public AgentServiceProviderNotFoundException(final Class<?> clazz, final String type) {
-        super(String.format("No implementation class load from SPI `%s` with type `%s`.", clazz.getName(), type));
-    }
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
index 10fa5234379..c61f4c48edf 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggerFactory.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.agent.core.logging;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.plugin.PluginJar;
 
 import java.io.File;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
similarity index 94%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
index eff91fed646..c7edc7ab3fc 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/listener/LoggingListener.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/logging/LoggingListener.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.listener;
+package org.apache.shardingsphere.agent.core.logging;
 
 import net.bytebuddy.agent.builder.AgentBuilder.Listener;
 import net.bytebuddy.description.type.TypeDescription;
 import net.bytebuddy.dynamic.DynamicType;
 import net.bytebuddy.utility.JavaModule;
-import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
 
 /**
  * Logging listener for ByteBuddy lifecycle.
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
index 8f533690d16..ca50a918f34 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/AdviceInstanceLoader.java
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.agent.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
 
 import java.util.HashMap;
@@ -49,7 +49,7 @@ public final class AdviceInstanceLoader {
      *
      * @param <T> expected type
      * @param className class name
-     * @param classLoader classloader
+     * @param classLoader class loader
      * @param isEnhancedForProxy is enhanced for proxy
      * @return the type reference
      */
@@ -68,7 +68,7 @@ public final class AdviceInstanceLoader {
             INIT_INSTANCE_LOCK.lock();
             adviceInstance = ADVICE_INSTANCE_CACHE.get(className);
             if (Objects.isNull(adviceInstance)) {
-                adviceInstance = Class.forName(className, true, AgentClassLoader.getDefaultPluginClassloader()).getDeclaredConstructor().newInstance();
+                adviceInstance = Class.forName(className, true, AgentClassLoader.getClassLoader()).getDeclaredConstructor().newInstance();
                 ADVICE_INSTANCE_CACHE.put(className, adviceInstance);
             }
             return (T) adviceInstance;
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 b9eedfbc365..eb66b0519be 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
@@ -25,10 +25,11 @@ import net.bytebuddy.matcher.ElementMatcher;
 import net.bytebuddy.matcher.ElementMatcher.Junction;
 import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
 import org.apache.shardingsphere.agent.config.AgentConfiguration;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.classloader.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.logging.LoggerFactory;
+import org.apache.shardingsphere.agent.core.logging.LoggerFactory.Logger;
 import org.apache.shardingsphere.agent.core.spi.PluginServiceLoader;
 import org.apache.shardingsphere.agent.spi.AdvisorDefinitionService;
 
@@ -48,9 +49,9 @@ import java.util.stream.Collectors;
 /**
  * Agent plugin loader.
  */
-public final class AgentPluginLoader implements PluginLoader {
+public final class AgentPluginLoader {
     
-    private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(AgentPluginLoader.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(AgentPluginLoader.class);
     
     private final Collection<PluginJar> pluginJars = new LinkedList<>();
     
@@ -67,8 +68,8 @@ public final class AgentPluginLoader implements PluginLoader {
      */
     public void load() throws IOException {
         loadPluginJars();
-        AgentClassLoader.initDefaultPluginClassLoader(pluginJars);
-        advisors = loadAdvisors(AgentClassLoader.getDefaultPluginClassloader());
+        AgentClassLoader.init(pluginJars);
+        advisors = loadAdvisors(AgentClassLoader.getClassLoader());
     }
     
     private void loadPluginJars() throws IOException {
@@ -112,16 +113,19 @@ public final class AgentPluginLoader implements PluginLoader {
     public ElementMatcher<? super TypeDescription> typeMatcher() {
         return new Junction<TypeDescription>() {
             
+            @SuppressWarnings("NullableProblems")
             @Override
             public boolean matches(final TypeDescription target) {
                 return advisors.containsKey(target.getTypeName());
             }
             
+            @SuppressWarnings("NullableProblems")
             @Override
             public <U extends TypeDescription> Junction<U> and(final ElementMatcher<? super U> other) {
                 return null;
             }
             
+            @SuppressWarnings("NullableProblems")
             @Override
             public <U extends TypeDescription> Junction<U> or(final ElementMatcher<? super U> other) {
                 return null;
@@ -129,17 +133,34 @@ public final class AgentPluginLoader implements PluginLoader {
         };
     }
     
-    @Override
+    /**
+     * To detect the type whether or not exists.
+     *
+     * @param typeDescription type description
+     * @return contains when it is true
+     */
     public boolean containsType(final TypeDescription typeDescription) {
         return advisors.containsKey(typeDescription.getTypeName());
     }
     
-    @Override
+    /**
+     * Load plugin advisor by type description.
+     *
+     * @param typeDescription type description
+     * @return plugin advisor
+     */
     public ClassAdvisor loadPluginAdvisor(final TypeDescription typeDescription) {
         return advisors.getOrDefault(typeDescription.getTypeName(), new ClassAdvisor(""));
     }
     
-    @Override
+    /**
+     * To get or create instance of the advice class. Create new one and caching when it is not exist.
+     *
+     * @param adviceClassName class name of advice
+     * @param classLoader class loader
+     * @param <T> advice type
+     * @return instance
+     */
     public <T> T getOrCreateInstance(final String adviceClassName, final ClassLoader classLoader) {
         return AdviceInstanceLoader.loadAdviceInstance(adviceClassName, classLoader, isEnhancedForProxy);
     }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
index ad8290690a3..48c89fc77c7 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginBootServiceManager.java
@@ -40,7 +40,7 @@ public final class PluginBootServiceManager {
      * Start all services.
      *
      * @param pluginConfigMap plugin configuration map
-     * @param classLoader classLoader
+     * @param classLoader class loader
      * @param isEnhancedForProxy is enhanced for proxy
      */
     public static void startAllServices(final Map<String, PluginConfiguration> pluginConfigMap, final ClassLoader classLoader, final boolean isEnhancedForProxy) {
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
deleted file mode 100644
index 76f3f9fd333..00000000000
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/PluginLoader.java
+++ /dev/null
@@ -1,50 +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 net.bytebuddy.description.type.TypeDescription;
-import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
-
-public interface PluginLoader {
-    
-    /**
-     * To detect the type whether or not exists.
-     *
-     * @param typeDescription type description
-     * @return contains when it is true
-     */
-    boolean containsType(TypeDescription typeDescription);
-    
-    /**
-     * Load plugin advisor by type description.
-     *
-     * @param typeDescription type description
-     * @return plugin advisor
-     */
-    ClassAdvisor loadPluginAdvisor(TypeDescription typeDescription);
-    
-    /**
-     * To get or create instance of the advice class. Create new one and caching when it is not exist.
-     * 
-     * @param adviceClassName class name of advice
-     * @param classLoader classloader
-     * @param <T> advice type
-     * @return instance
-     */
-    <T> T getOrCreateInstance(String adviceClassName, ClassLoader classLoader);
-}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
similarity index 87%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
index d0590fd9810..ad408a991ad 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedConstructorAdvice.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
@@ -24,10 +24,10 @@ import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
 import java.util.Collection;
 
 /**
- * Compose Constructor advice.
+ * Composed Constructor advice.
  */
 @RequiredArgsConstructor
-public final class ComposeConstructorAdvice implements ConstructorAdvice {
+public final class ComposedConstructorAdvice implements ConstructorAdvice {
     
     private final Collection<ConstructorAdvice> advices;
     
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
similarity index 90%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
index 8425111e621..c97b9bc088d 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeInstanceMethodAroundAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedInstanceMethodAroundAdvice.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
@@ -26,10 +26,10 @@ import java.lang.reflect.Method;
 import java.util.Collection;
 
 /**
- * Compose instance method around advice.
+ * Composed instance method around advice.
  */
 @RequiredArgsConstructor
-public final class ComposeInstanceMethodAroundAdvice implements InstanceMethodAroundAdvice {
+public final class ComposedInstanceMethodAroundAdvice implements InstanceMethodAroundAdvice {
     
     private final Collection<InstanceMethodAroundAdvice> advices;
     
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
similarity index 89%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
index 4b095c615dd..b05bf169510 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdvice.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advice/composed/ComposedStaticMethodAroundAdvice.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.plugin.advice.composed;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
@@ -25,10 +25,10 @@ import java.lang.reflect.Method;
 import java.util.Collection;
 
 /**
- * Compose class static method around advice.
+ * Composed class static method around advice.
  */
 @RequiredArgsConstructor
-public final class ComposeStaticMethodAroundAdvice implements StaticMethodAroundAdvice {
+public final class ComposedStaticMethodAroundAdvice implements StaticMethodAroundAdvice {
     
     private final Collection<StaticMethodAroundAdvice> advices;
     
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
index 2f69015e3ae..f253b03638a 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedConstructorInterceptor.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeConstructorAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedConstructorAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.ConstructorInterceptor;
 
 import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
 public final class ComposedConstructorInterceptor extends ConstructorInterceptor {
     
     public ComposedConstructorInterceptor(final Collection<ConstructorAdvice> constructorAdvices) {
-        super(new ComposeConstructorAdvice(constructorAdvices));
+        super(new ComposedConstructorAdvice(constructorAdvices));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
index 82ed76f92cd..e11e91ff5ad 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodAroundInterceptor.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeInstanceMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedInstanceMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodAroundInterceptor;
 
 import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
 public final class ComposedInstanceMethodAroundInterceptor extends InstanceMethodAroundInterceptor {
     
     public ComposedInstanceMethodAroundInterceptor(final Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices) {
-        super(new ComposeInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
+        super(new ComposedInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
index 0f9def6fb0c..823306de4a9 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedInstanceMethodInterceptorArgsOverride.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeInstanceMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedInstanceMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodInterceptorArgsOverride;
 
 import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
 public class ComposedInstanceMethodInterceptorArgsOverride extends InstanceMethodInterceptorArgsOverride {
     
     public ComposedInstanceMethodInterceptorArgsOverride(final Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices) {
-        super(new ComposeInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
+        super(new ComposedInstanceMethodAroundAdvice(instanceMethodAroundAdvices));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
index e4ffa430ae9..dc5e24e13a2 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodAroundInterceptor.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeStaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
 
 import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
 public final class ComposedStaticMethodAroundInterceptor extends StaticMethodAroundInterceptor {
     
     public ComposedStaticMethodAroundInterceptor(final Collection<StaticMethodAroundAdvice> instanceMethodAroundAdvices) {
-        super(new ComposeStaticMethodAroundAdvice(instanceMethodAroundAdvices));
+        super(new ComposedStaticMethodAroundAdvice(instanceMethodAroundAdvices));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
index 42823a58389..1f9003afb38 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/interceptor/compose/ComposedStaticMethodInterceptorArgsOverride.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.agent.core.plugin.interceptor.compose;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice.ComposeStaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
 
 import java.util.Collection;
@@ -29,6 +29,6 @@ import java.util.Collection;
 public final class ComposedStaticMethodInterceptorArgsOverride extends StaticMethodInterceptorArgsOverride {
     
     public ComposedStaticMethodInterceptorArgsOverride(final Collection<StaticMethodAroundAdvice> instanceMethodAroundAdvices) {
-        super(new ComposeStaticMethodAroundAdvice(instanceMethodAroundAdvices));
+        super(new ComposedStaticMethodAroundAdvice(instanceMethodAroundAdvices));
     }
 }
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
similarity index 87%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
index 8fd4c412cfe..9ae4eb0c2e9 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformationPoint.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformationPoint.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import net.bytebuddy.description.method.MethodDescription;
 
 /**
- * ShardingSphere transformer point.
+ * Agent transformer point.
  */
 @RequiredArgsConstructor
 @Getter
-public class ShardingSphereTransformationPoint<T> {
+public final class AgentTransformationPoint<T> {
     
     private final MethodDescription description;
     
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
similarity index 66%
rename from agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
rename to agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
index 44994b88f3a..4a6e2a9242e 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
 
 import lombok.RequiredArgsConstructor;
 import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
@@ -30,27 +30,27 @@ import net.bytebuddy.implementation.bind.annotation.Morph;
 import net.bytebuddy.jar.asm.Opcodes;
 import net.bytebuddy.matcher.ElementMatchers;
 import net.bytebuddy.utility.JavaModule;
+import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
+import org.apache.shardingsphere.agent.advisor.ConstructorAdvisor;
+import org.apache.shardingsphere.agent.advisor.InstanceMethodAdvisor;
 import org.apache.shardingsphere.agent.advisor.StaticMethodAdvisor;
+import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
+import org.apache.shardingsphere.agent.core.plugin.AgentPluginLoader;
+import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
 import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
-import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
 import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
-import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
-import org.apache.shardingsphere.agent.advisor.ConstructorAdvisor;
-import org.apache.shardingsphere.agent.advisor.InstanceMethodAdvisor;
-import org.apache.shardingsphere.agent.advisor.ClassAdvisor;
-import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
-import org.apache.shardingsphere.agent.core.plugin.PluginLoader;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.ConstructorInterceptor;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodAroundInterceptor;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodInterceptorArgsOverride;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodAroundInterceptor;
-import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInterceptorArgsOverride;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedConstructorInterceptor;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedInstanceMethodAroundInterceptor;
 import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedInstanceMethodInterceptorArgsOverride;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodAroundInterceptor;
+import org.apache.shardingsphere.agent.core.plugin.interceptor.compose.ComposedStaticMethodInterceptorArgsOverride;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -59,24 +59,25 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
- * ShardingSphere transformer.
+ * Agent transformer.
  */
 @RequiredArgsConstructor
-public final class ShardingSphereTransformer implements Transformer {
+public final class AgentTransformer implements Transformer {
     
-    private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(ShardingSphereTransformer.class);
+    private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(AgentTransformer.class);
     
     private static final String EXTRA_DATA = "_$EXTRA_DATA$_";
     
-    private final PluginLoader pluginLoader;
+    private final AgentPluginLoader agentPluginLoader;
     
+    @SuppressWarnings("NullableProblems")
     @Override
     public Builder<?> transform(final Builder<?> builder, final TypeDescription typeDescription, final ClassLoader classLoader, final JavaModule module) {
-        if (!pluginLoader.containsType(typeDescription)) {
+        if (!agentPluginLoader.containsType(typeDescription)) {
             return builder;
         }
         Builder<?> result = builder.defineField(EXTRA_DATA, Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA));
-        ClassAdvisor classAdvisor = pluginLoader.loadPluginAdvisor(typeDescription);
+        ClassAdvisor classAdvisor = agentPluginLoader.loadPluginAdvisor(typeDescription);
         result = interceptConstructor(typeDescription, classAdvisor.getConstructorAdvisors(), result, classLoader);
         result = interceptStaticMethod(typeDescription, classAdvisor.getStaticMethodAdvisors(), result, classLoader);
         result = interceptInstanceMethod(typeDescription, classAdvisor.getInstanceMethodAdvisors(), result, classLoader);
@@ -85,71 +86,70 @@ public final class ShardingSphereTransformer implements Transformer {
     
     private Builder<?> interceptConstructor(final TypeDescription description,
                                             final Collection<ConstructorAdvisor> constructorAdvisors, final Builder<?> builder, final ClassLoader classLoader) {
-        Collection<ShardingSphereTransformationPoint<? extends ConstructorInterceptor>> constructorAdviceComposePoints = description.getDeclaredMethods().stream()
+        Collection<AgentTransformationPoint<? extends ConstructorInterceptor>> constructorAdviceComposePoints = description.getDeclaredMethods().stream()
                 .filter(MethodDescription::isConstructor)
                 .map(each -> getMatchedTransformationPoint(constructorAdvisors, each, classLoader))
                 .filter(Objects::nonNull)
                 .collect(Collectors.toList());
         Builder<?> result = builder;
-        for (ShardingSphereTransformationPoint<? extends ConstructorInterceptor> each : constructorAdviceComposePoints) {
+        for (AgentTransformationPoint<? extends ConstructorInterceptor> each : constructorAdviceComposePoints) {
             try {
                 result = result.constructor(ElementMatchers.is(each.getDescription()))
                         .intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor())));
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
-                LOGGER.error("Failed to load advice class: {}", description.getTypeName(), ex);
+                LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
             }
         }
         return result;
     }
     
-    private ShardingSphereTransformationPoint<? extends ConstructorInterceptor> getMatchedTransformationPoint(final Collection<ConstructorAdvisor> constructorAdvisors,
-                                                                                                              final InDefinedShape methodDescription, final ClassLoader classLoader) {
+    private AgentTransformationPoint<? extends ConstructorInterceptor> getMatchedTransformationPoint(final Collection<ConstructorAdvisor> constructorAdvisors,
+                                                                                                     final InDefinedShape methodDescription, final ClassLoader classLoader) {
         List<ConstructorAdvisor> matchedConstructorAdvisors = constructorAdvisors
                 .stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
         if (matchedConstructorAdvisors.isEmpty()) {
             return null;
         }
         if (1 == matchedConstructorAdvisors.size()) {
-            return new ShardingSphereTransformationPoint<>(
-                    methodDescription, new ConstructorInterceptor(pluginLoader.getOrCreateInstance(matchedConstructorAdvisors.get(0).getAdviceClassName(), classLoader)));
+            return new AgentTransformationPoint<>(
+                    methodDescription, new ConstructorInterceptor(agentPluginLoader.getOrCreateInstance(matchedConstructorAdvisors.get(0).getAdviceClassName(), classLoader)));
         }
         Collection<ConstructorAdvice> constructorAdvices = matchedConstructorAdvisors.stream()
                 .map(ConstructorAdvisor::getAdviceClassName)
-                .map(each -> (ConstructorAdvice) pluginLoader.getOrCreateInstance(each, classLoader))
+                .map(each -> (ConstructorAdvice) agentPluginLoader.getOrCreateInstance(each, classLoader))
                 .collect(Collectors.toList());
-        return new ShardingSphereTransformationPoint<>(methodDescription, new ComposedConstructorInterceptor(constructorAdvices));
+        return new AgentTransformationPoint<>(methodDescription, new ComposedConstructorInterceptor(constructorAdvices));
     }
     
     private Builder<?> interceptStaticMethod(final TypeDescription description, final Collection<StaticMethodAdvisor> staticMethodAdvisors,
                                              final Builder<?> builder, final ClassLoader classLoader) {
-        Collection<ShardingSphereTransformationPoint<?>> staticMethodAdvicePoints = description.getDeclaredMethods().stream()
+        Collection<AgentTransformationPoint<?>> staticMethodAdvicePoints = description.getDeclaredMethods().stream()
                 .filter(each -> each.isStatic() && !(each.isAbstract() || each.isSynthetic()))
                 .map(each -> getMatchedStaticMethodPoint(staticMethodAdvisors, each, classLoader))
                 .filter(Objects::nonNull)
                 .collect(Collectors.toList());
         Builder<?> result = builder;
-        for (ShardingSphereTransformationPoint<?> each : staticMethodAdvicePoints) {
+        for (AgentTransformationPoint<?> each : staticMethodAdvicePoints) {
             try {
-                if (each.getInterceptor() instanceof StaticMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposedStaticMethodInterceptorArgsOverride) {
+                if (each.getInterceptor() instanceof StaticMethodInterceptorArgsOverride) {
                     result = result.method(ElementMatchers.is(each.getDescription()))
                             .intercept(MethodDelegation.withDefaultConfiguration().withBinders(Morph.Binder.install(OverrideArgsInvoker.class)).to(each.getInterceptor()));
                 } else {
-                    result = result.method(ElementMatchers.is(each.getDescription()))
-                            .intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                    result = result.method(ElementMatchers.is(each.getDescription())).intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
                 }
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
-                LOGGER.error("Failed to load advice class: {}", description.getTypeName(), ex);
+                LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
             }
         }
         return result;
     }
     
-    private ShardingSphereTransformationPoint<?> getMatchedStaticMethodPoint(final Collection<StaticMethodAdvisor> staticMethodAdvisors,
-                                                                             final InDefinedShape methodDescription, final ClassLoader classLoader) {
+    private AgentTransformationPoint<?> getMatchedStaticMethodPoint(final Collection<StaticMethodAdvisor> staticMethodAdvisors,
+                                                                    final InDefinedShape methodDescription, final ClassLoader classLoader) {
         List<StaticMethodAdvisor> matchedAdvisors = staticMethodAdvisors.stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
         if (matchedAdvisors.isEmpty()) {
             return null;
@@ -160,16 +160,16 @@ public final class ShardingSphereTransformer implements Transformer {
         return getComposedStaticMethodPoint(methodDescription, matchedAdvisors, classLoader);
     }
     
-    private ShardingSphereTransformationPoint<?> getSingleStaticMethodPoint(final InDefinedShape methodDescription,
-                                                                            final StaticMethodAdvisor staticMethodAdvisor, final ClassLoader classLoader) {
-        StaticMethodAroundAdvice staticMethodAroundAdvice = pluginLoader.getOrCreateInstance(staticMethodAdvisor.getAdviceClassName(), classLoader);
+    private AgentTransformationPoint<?> getSingleStaticMethodPoint(final InDefinedShape methodDescription,
+                                                                   final StaticMethodAdvisor staticMethodAdvisor, final ClassLoader classLoader) {
+        StaticMethodAroundAdvice staticMethodAroundAdvice = agentPluginLoader.getOrCreateInstance(staticMethodAdvisor.getAdviceClassName(), classLoader);
         return staticMethodAdvisor.isOverrideArgs()
-                ? new ShardingSphereTransformationPoint<>(methodDescription, new StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
-                : new ShardingSphereTransformationPoint<>(methodDescription, new StaticMethodAroundInterceptor(staticMethodAroundAdvice));
+                ? new AgentTransformationPoint<>(methodDescription, new StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
+                : new AgentTransformationPoint<>(methodDescription, new StaticMethodAroundInterceptor(staticMethodAroundAdvice));
     }
     
-    private ShardingSphereTransformationPoint<?> getComposedStaticMethodPoint(final InDefinedShape methodDescription,
-                                                                              final Collection<StaticMethodAdvisor> staticMethodAdvisors, final ClassLoader classLoader) {
+    private AgentTransformationPoint<?> getComposedStaticMethodPoint(final InDefinedShape methodDescription,
+                                                                     final Collection<StaticMethodAdvisor> staticMethodAdvisors, final ClassLoader classLoader) {
         Collection<StaticMethodAroundAdvice> staticMethodAroundAdvices = new LinkedList<>();
         boolean isArgsOverride = false;
         for (StaticMethodAdvisor each : staticMethodAdvisors) {
@@ -177,41 +177,40 @@ public final class ShardingSphereTransformer implements Transformer {
                 isArgsOverride = true;
             }
             if (null != each.getAdviceClassName()) {
-                staticMethodAroundAdvices.add(pluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
+                staticMethodAroundAdvices.add(agentPluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
             }
         }
-        return isArgsOverride ? new ShardingSphereTransformationPoint<>(methodDescription, new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
-                : new ShardingSphereTransformationPoint<>(methodDescription, new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices));
+        return isArgsOverride ? new AgentTransformationPoint<>(methodDescription, new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
+                : new AgentTransformationPoint<>(methodDescription, new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices));
     }
     
     private Builder<?> interceptInstanceMethod(final TypeDescription description, final Collection<InstanceMethodAdvisor> instanceMethodAdvisors,
                                                final Builder<?> builder, final ClassLoader classLoader) {
-        Collection<ShardingSphereTransformationPoint<?>> instanceMethodAdviceComposePoints = description.getDeclaredMethods().stream()
+        Collection<AgentTransformationPoint<?>> instanceMethodAdviceComposePoints = description.getDeclaredMethods().stream()
                 .filter(each -> !(each.isAbstract() || each.isSynthetic()))
                 .map(each -> getMatchedInstanceMethodPoint(instanceMethodAdvisors, each, classLoader))
                 .filter(Objects::nonNull)
                 .collect(Collectors.toList());
         Builder<?> result = builder;
-        for (ShardingSphereTransformationPoint<?> each : instanceMethodAdviceComposePoints) {
+        for (AgentTransformationPoint<?> each : instanceMethodAdviceComposePoints) {
             try {
-                if (each.getInterceptor() instanceof InstanceMethodInterceptorArgsOverride || each.getInterceptor() instanceof ComposedInstanceMethodInterceptorArgsOverride) {
+                if (each.getInterceptor() instanceof InstanceMethodInterceptorArgsOverride) {
                     result = result.method(ElementMatchers.is(each.getDescription()))
                             .intercept(MethodDelegation.withDefaultConfiguration().withBinders(Morph.Binder.install(OverrideArgsInvoker.class)).to(each.getInterceptor()));
                 } else {
-                    result = result.method(ElementMatchers.is(each.getDescription()))
-                            .intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
+                    result = result.method(ElementMatchers.is(each.getDescription())).intercept(MethodDelegation.withDefaultConfiguration().to(each.getInterceptor()));
                 }
                 // CHECKSTYLE:OFF
             } catch (final Throwable ex) {
                 // CHECKSTYLE:ON
-                LOGGER.error("Failed to load advice class `{}`", description.getTypeName(), ex);
+                LOGGER.error("Failed to load advice class: {}.", description.getTypeName(), ex);
             }
         }
         return result;
     }
     
-    private ShardingSphereTransformationPoint<?> getMatchedInstanceMethodPoint(final Collection<InstanceMethodAdvisor> instanceMethodAroundPoints,
-                                                                               final InDefinedShape methodDescription, final ClassLoader classLoader) {
+    private AgentTransformationPoint<?> getMatchedInstanceMethodPoint(final Collection<InstanceMethodAdvisor> instanceMethodAroundPoints,
+                                                                      final InDefinedShape methodDescription, final ClassLoader classLoader) {
         List<InstanceMethodAdvisor> instanceMethodAdvisors = instanceMethodAroundPoints
                 .stream().filter(each -> each.getPointcut().matches(methodDescription)).collect(Collectors.toList());
         if (instanceMethodAdvisors.isEmpty()) {
@@ -223,16 +222,16 @@ public final class ShardingSphereTransformer implements Transformer {
         return getComposeInstanceMethodPoint(methodDescription, instanceMethodAdvisors, classLoader);
     }
     
-    private ShardingSphereTransformationPoint<?> getSingleInstanceMethodPoint(final InDefinedShape methodDescription,
-                                                                              final InstanceMethodAdvisor instanceMethodAdvisor, final ClassLoader classLoader) {
-        InstanceMethodAroundAdvice instanceMethodAroundAdvice = pluginLoader.getOrCreateInstance(instanceMethodAdvisor.getAdviceClassName(), classLoader);
+    private AgentTransformationPoint<?> getSingleInstanceMethodPoint(final InDefinedShape methodDescription,
+                                                                     final InstanceMethodAdvisor instanceMethodAdvisor, final ClassLoader classLoader) {
+        InstanceMethodAroundAdvice instanceMethodAroundAdvice = agentPluginLoader.getOrCreateInstance(instanceMethodAdvisor.getAdviceClassName(), classLoader);
         return instanceMethodAdvisor.isOverrideArgs()
-                ? new ShardingSphereTransformationPoint<>(methodDescription, new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
-                : new ShardingSphereTransformationPoint<>(methodDescription, new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
+                ? new AgentTransformationPoint<>(methodDescription, new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
+                : new AgentTransformationPoint<>(methodDescription, new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
     }
     
-    private ShardingSphereTransformationPoint<?> getComposeInstanceMethodPoint(final InDefinedShape methodDescription,
-                                                                               final Collection<InstanceMethodAdvisor> instanceMethodAdvisors, final ClassLoader classLoader) {
+    private AgentTransformationPoint<?> getComposeInstanceMethodPoint(final InDefinedShape methodDescription,
+                                                                      final Collection<InstanceMethodAdvisor> instanceMethodAdvisors, final ClassLoader classLoader) {
         Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices = new LinkedList<>();
         boolean isArgsOverride = false;
         for (InstanceMethodAdvisor each : instanceMethodAdvisors) {
@@ -240,11 +239,11 @@ public final class ShardingSphereTransformer implements Transformer {
                 isArgsOverride = true;
             }
             if (null != each.getAdviceClassName()) {
-                instanceMethodAroundAdvices.add(pluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
+                instanceMethodAroundAdvices.add(agentPluginLoader.getOrCreateInstance(each.getAdviceClassName(), classLoader));
             }
         }
         return isArgsOverride
-                ? new ShardingSphereTransformationPoint<>(methodDescription, new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
-                : new ShardingSphereTransformationPoint<>(methodDescription, new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
+                ? new AgentTransformationPoint<>(methodDescription, new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
+                : new AgentTransformationPoint<>(methodDescription, new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
     }
 }
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
index adc8983dd91..9d7c15bd265 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/plugin/interceptor/ConstructorInterceptorTest.java
@@ -28,7 +28,7 @@ import net.bytebuddy.implementation.SuperMethodCall;
 import net.bytebuddy.jar.asm.Opcodes;
 import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
 import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
 import org.apache.shardingsphere.agent.core.mock.material.ConstructorMaterial;
 import org.junit.After;
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
similarity index 94%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index 0d71366e3e9..3a20585f19e 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/ShardingSphereTransformerTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer;
+package org.apache.shardingsphere.agent.core.transformer;
 
 import net.bytebuddy.ByteBuddy;
 import net.bytebuddy.agent.ByteBuddyAgent;
@@ -23,8 +23,8 @@ import net.bytebuddy.agent.builder.AgentBuilder;
 import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
 import net.bytebuddy.dynamic.scaffold.TypeValidation;
 import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.core.bytebuddy.listener.LoggingListener;
-import org.apache.shardingsphere.agent.core.common.AgentClassLoader;
+import org.apache.shardingsphere.agent.core.logging.LoggingListener;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
 import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAroundRepeatedAdvice;
@@ -55,7 +55,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertArrayEquals;
 
-public final class ShardingSphereTransformerTest {
+public final class AgentTransformerTest {
     
     private static final AgentPluginLoader PLUGIN_LOADER = new AgentPluginLoader();
     
@@ -67,7 +67,7 @@ public final class ShardingSphereTransformerTest {
     @SuppressWarnings("unchecked")
     public static void setup() throws ReflectiveOperationException {
         ByteBuddyAgent.install();
-        AgentClassLoader.initDefaultPluginClassLoader(Collections.emptyList());
+        AgentClassLoader.init(Collections.emptyList());
         FieldReader objectPoolReader = new FieldReader(AdviceInstanceLoader.class, AdviceInstanceLoader.class.getDeclaredField("ADVICE_INSTANCE_CACHE"));
         Map<String, Object> objectPool = (Map<String, Object>) objectPoolReader.read();
         objectPool.put(MockConstructorAdvice.class.getTypeName(), new MockConstructorAdvice());
@@ -86,7 +86,7 @@ public final class ShardingSphereTransformerTest {
                 .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
                 .with(new LoggingListener())
                 .type(PLUGIN_LOADER.typeMatcher())
-                .transform(new ShardingSphereTransformer(PLUGIN_LOADER))
+                .transform(new AgentTransformer(PLUGIN_LOADER))
                 .asTerminalTransformation()
                 .installOnByteBuddyAgent();
     }
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
similarity index 83%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
index 02f66e2c44a..4f9adde70e5 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeConstructorAdviceTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedConstructorAdviceTest.java
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.transformer.advice;
 
 import org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
 import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
 import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedConstructorAdvice;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,15 +32,15 @@ import java.util.LinkedList;
 import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class ComposeConstructorAdviceTest {
+public final class ComposedConstructorAdviceTest {
     
     private final ConstructorAdvice constructorAdvice = new MockConstructorAdvice();
     
-    private ComposeConstructorAdvice actual;
+    private ComposedConstructorAdvice actual;
     
     @Before
     public void setUp() {
-        actual = new ComposeConstructorAdvice(Collections.singleton(constructorAdvice));
+        actual = new ComposedConstructorAdvice(Collections.singleton(constructorAdvice));
     }
     
     @Test
diff --git a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
similarity index 87%
rename from agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java
rename to agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
index 7119b581c82..d1702c3b7ed 100644
--- a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/bytebuddy/transformer/advice/ComposeStaticMethodAroundAdviceTest.java
+++ b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/advice/ComposedStaticMethodAroundAdviceTest.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.bytebuddy.transformer.advice;
+package org.apache.shardingsphere.agent.core.transformer.advice;
 
 import org.apache.shardingsphere.agent.core.plugin.advice.StaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.plugin.MethodInvocationResult;
+import org.apache.shardingsphere.agent.core.plugin.advice.composed.ComposedStaticMethodAroundAdvice;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,16 +34,16 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class ComposeStaticMethodAroundAdviceTest {
+public final class ComposedStaticMethodAroundAdviceTest {
     
     @Mock
     private StaticMethodAroundAdvice staticMethodAroundAdvice;
     
-    private ComposeStaticMethodAroundAdvice actual;
+    private ComposedStaticMethodAroundAdvice actual;
     
     @Before
     public void setUp() {
-        actual = new ComposeStaticMethodAroundAdvice(new ArrayList<>(Collections.singleton(staticMethodAroundAdvice)));
+        actual = new ComposedStaticMethodAroundAdvice(new ArrayList<>(Collections.singleton(staticMethodAroundAdvice)));
     }
     
     @Test