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();
}