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

sunnianjun 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 95480250d97 Refactor AgentTransformer (#22881)
95480250d97 is described below

commit 95480250d9775e4e5da1a4071b9e2f0b906b3dc5
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Dec 15 14:35:19 2022 +0800

    Refactor AgentTransformer (#22881)
    
    * Refactor AgentTransformer
---
 .../agent/bootstrap/ShardingSphereAgent.java        |  7 +++----
 .../agent/core/plugin/advisor/AgentAdvisors.java    | 13 -------------
 .../agent/core/transformer/AgentTransformer.java    | 21 ++++++++++++++-------
 .../core/transformer/AgentTransformerTest.java      |  2 +-
 4 files changed, 18 insertions(+), 25 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 cd7424d6876..51f35d384e9 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
@@ -55,8 +55,7 @@ public final class ShardingSphereAgent {
         AgentConfiguration agentConfig = AgentConfigurationLoader.load();
         AgentConfigurationRegistry.INSTANCE.put(agentConfig);
         boolean isEnhancedForProxy = isEnhancedForProxy();
-        AgentAdvisors agentAdvisors = loadAgentAdvisors(isEnhancedForProxy);
-        setUpAgentBuilder(instrumentation, agentAdvisors);
+        setUpAgentBuilder(instrumentation, 
loadAgentAdvisors(isEnhancedForProxy), isEnhancedForProxy);
         if (isEnhancedForProxy) {
             setupPluginBootService(agentConfig.getPlugins());
         }
@@ -77,12 +76,12 @@ public final class ShardingSphereAgent {
         return true;
     }
     
-    private static void setUpAgentBuilder(final Instrumentation 
instrumentation, final AgentAdvisors agentAdvisors) {
+    private static void setUpAgentBuilder(final Instrumentation 
instrumentation, final AgentAdvisors agentAdvisors, final boolean 
isEnhancedForProxy) {
         AgentBuilder agentBuilder = new AgentBuilder.Default().with(new 
ByteBuddy().with(TypeValidation.ENABLED))
                 .ignore(ElementMatchers.isSynthetic())
                 
.or(ElementMatchers.nameStartsWith("org.apache.shardingsphere.agent."));
         agentBuilder.type(agentAdvisors.createTypeMatcher())
-                .transform(new AgentTransformer(agentAdvisors))
+                .transform(new AgentTransformer(agentAdvisors, 
isEnhancedForProxy))
                 .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
                 .with(new LoggingListener()).installOn(instrumentation);
     }
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advisor/AgentAdvisors.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advisor/AgentAdvisors.java
index 6519a552ddd..b299194d23d 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advisor/AgentAdvisors.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/plugin/advisor/AgentAdvisors.java
@@ -27,7 +27,6 @@ import 
org.apache.shardingsphere.agent.config.plugin.AgentConfiguration;
 import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
 import 
org.apache.shardingsphere.agent.core.config.registry.AgentConfigurationRegistry;
 import org.apache.shardingsphere.agent.core.plugin.PluginJar;
-import org.apache.shardingsphere.agent.core.plugin.loader.AdviceInstanceLoader;
 import org.apache.shardingsphere.agent.core.spi.PluginServiceLoader;
 import org.apache.shardingsphere.agent.spi.advisor.AdvisorDefinitionService;
 
@@ -121,16 +120,4 @@ public final class AgentAdvisors {
     public ClassAdvisorConfiguration getClassAdvisorConfiguration(final 
TypeDescription typeDescription) {
         return advisorConfigs.getOrDefault(typeDescription.getTypeName(), new 
ClassAdvisorConfiguration(""));
     }
-    
-    /**
-     * 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/transformer/AgentTransformer.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
index 4b4aa9cad22..d1b33e93e6f 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformer.java
@@ -40,6 +40,7 @@ import 
org.apache.shardingsphere.agent.core.plugin.TargetAdviceObject;
 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.advice.StaticMethodAroundAdvice;
+import org.apache.shardingsphere.agent.core.plugin.advisor.AgentAdvisors;
 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;
@@ -50,7 +51,7 @@ import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.Composed
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedInstanceMethodInterceptorArgsOverride;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedStaticMethodAroundInterceptor;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedStaticMethodInterceptorArgsOverride;
-import org.apache.shardingsphere.agent.core.plugin.advisor.AgentAdvisors;
+import org.apache.shardingsphere.agent.core.plugin.loader.AdviceInstanceLoader;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -70,6 +71,8 @@ public final class AgentTransformer implements Transformer {
     
     private final AgentAdvisors agentAdvisors;
     
+    private final boolean isEnhancedForProxy;
+    
     @SuppressWarnings("NullableProblems")
     @Override
     public Builder<?> transform(final Builder<?> builder, final 
TypeDescription typeDescription, final ClassLoader classLoader, final 
JavaModule module) {
@@ -114,11 +117,11 @@ public final class AgentTransformer implements 
Transformer {
         }
         if (1 == matchedConstructorAdvisorConfigs.size()) {
             return new AgentTransformationPoint<>(
-                    methodDescription, new 
ConstructorInterceptor(agentAdvisors.getOrCreateInstance(matchedConstructorAdvisorConfigs.get(0).getAdviceClassName(),
 classLoader)));
+                    methodDescription, new 
ConstructorInterceptor(loadAdviceInstance(matchedConstructorAdvisorConfigs.get(0).getAdviceClassName(),
 classLoader)));
         }
         Collection<ConstructorAdvice> constructorAdvices = 
matchedConstructorAdvisorConfigs.stream()
                 .map(ConstructorAdvisorConfiguration::getAdviceClassName)
-                .map(each -> (ConstructorAdvice) 
agentAdvisors.getOrCreateInstance(each, classLoader))
+                .map(each -> (ConstructorAdvice) loadAdviceInstance(each, 
classLoader))
                 .collect(Collectors.toList());
         return new AgentTransformationPoint<>(methodDescription, new 
ComposedConstructorInterceptor(constructorAdvices));
     }
@@ -162,7 +165,7 @@ public final class AgentTransformer implements Transformer {
     
     private AgentTransformationPoint<?> getSingleStaticMethodPoint(final 
InDefinedShape methodDescription,
                                                                    final 
StaticMethodAdvisorConfiguration staticMethodAdvisorConfig, final ClassLoader 
classLoader) {
-        StaticMethodAroundAdvice staticMethodAroundAdvice = 
agentAdvisors.getOrCreateInstance(staticMethodAdvisorConfig.getAdviceClassName(),
 classLoader);
+        StaticMethodAroundAdvice staticMethodAroundAdvice = 
loadAdviceInstance(staticMethodAdvisorConfig.getAdviceClassName(), classLoader);
         return staticMethodAdvisorConfig.isOverrideArgs()
                 ? new AgentTransformationPoint<>(methodDescription, new 
StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
                 : new AgentTransformationPoint<>(methodDescription, new 
StaticMethodAroundInterceptor(staticMethodAroundAdvice));
@@ -177,7 +180,7 @@ public final class AgentTransformer implements Transformer {
                 isArgsOverride = true;
             }
             if (null != each.getAdviceClassName()) {
-                
staticMethodAroundAdvices.add(agentAdvisors.getOrCreateInstance(each.getAdviceClassName(),
 classLoader));
+                
staticMethodAroundAdvices.add(loadAdviceInstance(each.getAdviceClassName(), 
classLoader));
             }
         }
         return isArgsOverride ? new 
AgentTransformationPoint<>(methodDescription, new 
ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
@@ -224,7 +227,7 @@ public final class AgentTransformer implements Transformer {
     
     private AgentTransformationPoint<?> getSingleInstanceMethodPoint(final 
InDefinedShape methodDescription,
                                                                      final 
InstanceMethodAdvisorConfiguration instanceMethodAdvisorConfig, final 
ClassLoader classLoader) {
-        InstanceMethodAroundAdvice instanceMethodAroundAdvice = 
agentAdvisors.getOrCreateInstance(instanceMethodAdvisorConfig.getAdviceClassName(),
 classLoader);
+        InstanceMethodAroundAdvice instanceMethodAroundAdvice = 
loadAdviceInstance(instanceMethodAdvisorConfig.getAdviceClassName(), 
classLoader);
         return instanceMethodAdvisorConfig.isOverrideArgs()
                 ? new AgentTransformationPoint<>(methodDescription, new 
InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
                 : new AgentTransformationPoint<>(methodDescription, new 
InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
@@ -239,11 +242,15 @@ public final class AgentTransformer implements 
Transformer {
                 isArgsOverride = true;
             }
             if (null != each.getAdviceClassName()) {
-                
instanceMethodAroundAdvices.add(agentAdvisors.getOrCreateInstance(each.getAdviceClassName(),
 classLoader));
+                
instanceMethodAroundAdvices.add(loadAdviceInstance(each.getAdviceClassName(), 
classLoader));
             }
         }
         return isArgsOverride
                 ? new AgentTransformationPoint<>(methodDescription, new 
ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
                 : new AgentTransformationPoint<>(methodDescription, new 
ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
     }
+    
+    private <T> T loadAdviceInstance(final String adviceClassName, final 
ClassLoader classLoader) {
+        return AdviceInstanceLoader.loadAdviceInstance(adviceClassName, 
classLoader, isEnhancedForProxy);
+    }
 }
diff --git 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index 9ddeb5892b3..0bf5d5c58d4 100644
--- 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
+++ 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -86,7 +86,7 @@ public final class AgentTransformerTest {
                 .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
                 .with(new LoggingListener())
                 .type(AGENT_ADVISORS.createTypeMatcher())
-                .transform(new AgentTransformer(AGENT_ADVISORS))
+                .transform(new AgentTransformer(AGENT_ADVISORS, true))
                 .asTerminalTransformation()
                 .installOnByteBuddyAgent();
     }

Reply via email to