You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/16 09:11:21 UTC
[shardingsphere] branch master updated: Refactor config package and add MethodAdvisorConfiguration (#22910)
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 19ca29015ab Refactor config package and add MethodAdvisorConfiguration (#22910)
19ca29015ab is described below
commit 19ca29015ab362a4e2832050bdedf57755442c84
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Dec 16 17:11:12 2022 +0800
Refactor config package and add MethodAdvisorConfiguration (#22910)
* Refactor AdvisorBuilder
* Refactor config package and add MethodAdvisorConfiguration
---
.../agent/config/advisor/AdvisorConfiguration.java | 3 ++
.../MethodAdvisorConfiguration.java} | 24 +++++++----
.../type}/ConstructorAdvisorConfiguration.java | 5 ++-
.../type}/InstanceMethodAdvisorConfiguration.java | 5 ++-
.../type}/StaticMethodAdvisorConfiguration.java | 5 ++-
.../builder/ConstructorAdvisorBuilder.java | 45 ++++++++++----------
.../builder/InstanceMethodAdvisorBuilder.java | 48 ++++++++++------------
.../builder/StaticMethodAdvisorBuilder.java | 43 +++++++++----------
.../core/transformer/AgentTransformerTest.java | 6 +--
.../BaseLoggingAdvisorDefinitionService.java | 2 +-
.../PrometheusAdvisorDefinitionService.java | 6 +--
.../adviser/impl/CommandExecutorTaskAdviser.java | 2 +-
.../adviser/impl/JDBCExecutorCallbackAdviser.java | 2 +-
.../adviser/impl/SQLParserEngineAdviser.java | 2 +-
14 files changed, 101 insertions(+), 97 deletions(-)
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
index 1d8ee35c19f..378fb0a0678 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/AdvisorConfiguration.java
@@ -19,6 +19,9 @@ package org.apache.shardingsphere.agent.config.advisor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.agent.config.advisor.method.type.ConstructorAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.StaticMethodAdvisorConfiguration;
import java.util.Collection;
import java.util.LinkedList;
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/MethodAdvisorConfiguration.java
similarity index 70%
copy from agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java
copy to agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/MethodAdvisorConfiguration.java
index 172fb033b6c..b74a44caa8b 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/MethodAdvisorConfiguration.java
@@ -15,21 +15,27 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.config.advisor;
+package org.apache.shardingsphere.agent.config.advisor.method;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
/**
- * Constructor advisor configuration.
+ * Method advisor configuration.
*/
-@RequiredArgsConstructor
-@Getter
-public final class ConstructorAdvisorConfiguration {
+public interface MethodAdvisorConfiguration {
- private final ElementMatcher<? super MethodDescription> pointcut;
+ /**
+ * Get pointcut.
+ *
+ * @return pointcut
+ */
+ ElementMatcher<? super MethodDescription> getPointcut();
- private final String adviceClassName;
+ /**
+ * Get advice class name.
+ *
+ * @return advice class name
+ */
+ String getAdviceClassName();
}
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/ConstructorAdvisorConfiguration.java
similarity index 82%
rename from agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java
rename to agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/ConstructorAdvisorConfiguration.java
index 172fb033b6c..cd57f63463b 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/ConstructorAdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/ConstructorAdvisorConfiguration.java
@@ -15,19 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.config.advisor;
+package org.apache.shardingsphere.agent.config.advisor.method.type;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.shardingsphere.agent.config.advisor.method.MethodAdvisorConfiguration;
/**
* Constructor advisor configuration.
*/
@RequiredArgsConstructor
@Getter
-public final class ConstructorAdvisorConfiguration {
+public final class ConstructorAdvisorConfiguration implements MethodAdvisorConfiguration {
private final ElementMatcher<? super MethodDescription> pointcut;
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/InstanceMethodAdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/InstanceMethodAdvisorConfiguration.java
similarity index 84%
rename from agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/InstanceMethodAdvisorConfiguration.java
rename to agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/InstanceMethodAdvisorConfiguration.java
index b44b049571a..a045dbdaee1 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/InstanceMethodAdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/InstanceMethodAdvisorConfiguration.java
@@ -15,19 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.config.advisor;
+package org.apache.shardingsphere.agent.config.advisor.method.type;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.shardingsphere.agent.config.advisor.method.MethodAdvisorConfiguration;
/**
* Instance method advisor configuration.
*/
@RequiredArgsConstructor
@Getter
-public final class InstanceMethodAdvisorConfiguration {
+public final class InstanceMethodAdvisorConfiguration implements MethodAdvisorConfiguration {
private final ElementMatcher<? super MethodDescription> pointcut;
diff --git a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/StaticMethodAdvisorConfiguration.java b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/StaticMethodAdvisorConfiguration.java
similarity index 85%
rename from agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/StaticMethodAdvisorConfiguration.java
rename to agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/StaticMethodAdvisorConfiguration.java
index b0747f30738..7da857f88ff 100644
--- a/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/StaticMethodAdvisorConfiguration.java
+++ b/agent/api/src/main/java/org/apache/shardingsphere/agent/config/advisor/method/type/StaticMethodAdvisorConfiguration.java
@@ -15,19 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.agent.config.advisor;
+package org.apache.shardingsphere.agent.config.advisor.method.type;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.shardingsphere.agent.config.advisor.method.MethodAdvisorConfiguration;
/**
* Static method advisor configuration.
*/
@RequiredArgsConstructor
@Getter
-public final class StaticMethodAdvisorConfiguration {
+public final class StaticMethodAdvisorConfiguration implements MethodAdvisorConfiguration {
private final ElementMatcher<? super MethodDescription> pointcut;
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
index f7c0e534bc6..141c26fb502 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
@@ -24,7 +24,7 @@ import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.SuperMethodCall;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.config.advisor.ConstructorAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.ConstructorAdvisorConfiguration;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
@@ -46,15 +46,15 @@ public final class ConstructorAdvisorBuilder {
private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(ConstructorAdvisorBuilder.class);
- private final Collection<ConstructorAdvisorConfiguration> constructorAdvisorConfigs;
+ private final Collection<ConstructorAdvisorConfiguration> advisorConfigs;
private final TypeDescription typePointcut;
private final AdviceFactory adviceFactory;
- public ConstructorAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<ConstructorAdvisorConfiguration> constructorAdvisorConfigs,
+ public ConstructorAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<ConstructorAdvisorConfiguration> advisorConfigs,
final boolean isEnhancedForProxy, final TypeDescription typePointcut, final ClassLoader classLoader) {
- this.constructorAdvisorConfigs = constructorAdvisorConfigs;
+ this.advisorConfigs = advisorConfigs;
this.typePointcut = typePointcut;
adviceFactory = new AdviceFactory(classLoader, pluginConfigs, isEnhancedForProxy);
}
@@ -67,12 +67,9 @@ public final class ConstructorAdvisorBuilder {
*/
public Builder<?> create(final Builder<?> builder) {
Builder<?> result = builder;
- Collection<MethodAdvisor<? extends ConstructorInterceptor>> constructorAdvisors = typePointcut.getDeclaredMethods().stream()
- .filter(MethodDescription::isConstructor)
- .map(this::getMatchedConstructorAdvisor)
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
- for (MethodAdvisor<? extends ConstructorInterceptor> each : constructorAdvisors) {
+ Collection<MethodAdvisor<?>> matchedAdvisor = typePointcut.getDeclaredMethods()
+ .stream().filter(MethodDescription::isConstructor).map(this::getMatchedAdvisor).filter(Objects::nonNull).collect(Collectors.toList());
+ for (MethodAdvisor<?> each : matchedAdvisor) {
try {
result = result.constructor(ElementMatchers.is(each.getPointcut()))
.intercept(SuperMethodCall.INSTANCE.andThen(MethodDelegation.withDefaultConfiguration().to(each.getAdvice())));
@@ -85,20 +82,24 @@ public final class ConstructorAdvisorBuilder {
return result;
}
- private MethodAdvisor<? extends ConstructorInterceptor> getMatchedConstructorAdvisor(final InDefinedShape methodPointcut) {
- List<ConstructorAdvisorConfiguration> matchedConstructorAdvisorConfigs = constructorAdvisorConfigs
- .stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
- if (matchedConstructorAdvisorConfigs.isEmpty()) {
+ private MethodAdvisor<?> getMatchedAdvisor(final InDefinedShape methodPointcut) {
+ List<ConstructorAdvisorConfiguration> matchedAdvisorConfigs = advisorConfigs.stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
+ if (matchedAdvisorConfigs.isEmpty()) {
return null;
}
- if (1 == matchedConstructorAdvisorConfigs.size()) {
- return new MethodAdvisor<>(
- methodPointcut, new ConstructorInterceptor(adviceFactory.getAdvice(matchedConstructorAdvisorConfigs.get(0).getAdviceClassName())));
+ if (1 == matchedAdvisorConfigs.size()) {
+ return getSingleMethodAdvisor(methodPointcut, matchedAdvisorConfigs);
}
- Collection<ConstructorAdvice> constructorAdvices = matchedConstructorAdvisorConfigs.stream()
- .map(ConstructorAdvisorConfiguration::getAdviceClassName)
- .map(each -> (ConstructorAdvice) adviceFactory.getAdvice(each))
- .collect(Collectors.toList());
- return new MethodAdvisor<>(methodPointcut, new ComposedConstructorInterceptor(constructorAdvices));
+ return getComposedMethodAdvisor(methodPointcut, matchedAdvisorConfigs);
+ }
+
+ private MethodAdvisor<ConstructorInterceptor> getSingleMethodAdvisor(final InDefinedShape methodPointcut, final List<ConstructorAdvisorConfiguration> matchedAdvisorConfigs) {
+ return new MethodAdvisor<>(methodPointcut, new ConstructorInterceptor(adviceFactory.getAdvice(matchedAdvisorConfigs.get(0).getAdviceClassName())));
+ }
+
+ private MethodAdvisor<ComposedConstructorInterceptor> getComposedMethodAdvisor(final InDefinedShape methodPointcut, final List<ConstructorAdvisorConfiguration> matchedAdvisorConfigs) {
+ Collection<ConstructorAdvice> advices = matchedAdvisorConfigs
+ .stream().map(ConstructorAdvisorConfiguration::getAdviceClassName).map(each -> (ConstructorAdvice) adviceFactory.getAdvice(each)).collect(Collectors.toList());
+ return new MethodAdvisor<>(methodPointcut, new ComposedConstructorInterceptor(advices));
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
index db7e485dc38..bca178da249 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
@@ -23,7 +23,7 @@ import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.bind.annotation.Morph;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
@@ -49,15 +49,15 @@ public final class InstanceMethodAdvisorBuilder {
private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(InstanceMethodAdvisorBuilder.class);
- private final Collection<InstanceMethodAdvisorConfiguration> instanceMethodAdvisorConfigs;
+ private final Collection<InstanceMethodAdvisorConfiguration> advisorConfigs;
private final TypeDescription typePointcut;
private final AdviceFactory adviceFactory;
- public InstanceMethodAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<InstanceMethodAdvisorConfiguration> instanceMethodAdvisorConfigs,
+ public InstanceMethodAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<InstanceMethodAdvisorConfiguration> advisorConfigs,
final boolean isEnhancedForProxy, final TypeDescription typePointcut, final ClassLoader classLoader) {
- this.instanceMethodAdvisorConfigs = instanceMethodAdvisorConfigs;
+ this.advisorConfigs = advisorConfigs;
this.typePointcut = typePointcut;
adviceFactory = new AdviceFactory(classLoader, pluginConfigs, isEnhancedForProxy);
}
@@ -69,13 +69,10 @@ public final class InstanceMethodAdvisorBuilder {
* @return created builder
*/
public Builder<?> create(final Builder<?> builder) {
- Collection<MethodAdvisor<?>> instanceMethodAdviceComposePoints = typePointcut.getDeclaredMethods().stream()
- .filter(each -> !(each.isAbstract() || each.isSynthetic()))
- .map(this::getMatchedInstanceMethodPoint)
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
Builder<?> result = builder;
- for (MethodAdvisor<?> each : instanceMethodAdviceComposePoints) {
+ Collection<MethodAdvisor<?>> matchedAdvisors = typePointcut.getDeclaredMethods()
+ .stream().filter(each -> !(each.isAbstract() || each.isSynthetic())).map(this::getMatchedAdvisor).filter(Objects::nonNull).collect(Collectors.toList());
+ for (MethodAdvisor<?> each : matchedAdvisors) {
try {
if (each.getAdvice() instanceof InstanceMethodInterceptorArgsOverride) {
result = result.method(ElementMatchers.is(each.getPointcut()))
@@ -92,29 +89,27 @@ public final class InstanceMethodAdvisorBuilder {
return result;
}
- private MethodAdvisor<?> getMatchedInstanceMethodPoint(final InDefinedShape methodPointcut) {
- List<InstanceMethodAdvisorConfiguration> instanceMethodAdvisorConfigs = this.instanceMethodAdvisorConfigs
- .stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
- if (instanceMethodAdvisorConfigs.isEmpty()) {
+ private MethodAdvisor<?> getMatchedAdvisor(final InDefinedShape methodPointcut) {
+ List<InstanceMethodAdvisorConfiguration> matchedAdvisorConfigs = advisorConfigs.stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
+ if (matchedAdvisorConfigs.isEmpty()) {
return null;
}
- if (1 == instanceMethodAdvisorConfigs.size()) {
- return getSingleInstanceMethodPoint(methodPointcut, instanceMethodAdvisorConfigs.get(0));
+ if (1 == matchedAdvisorConfigs.size()) {
+ return getSingleMethodAdvisor(methodPointcut, matchedAdvisorConfigs.get(0));
}
- return getComposeInstanceMethodPoint(methodPointcut);
+ return getComposedMethodAdvisor(methodPointcut);
}
- private MethodAdvisor<?> getSingleInstanceMethodPoint(final InDefinedShape methodPointcut, final InstanceMethodAdvisorConfiguration instanceMethodAdvisorConfig) {
- InstanceMethodAroundAdvice instanceMethodAroundAdvice = adviceFactory.getAdvice(instanceMethodAdvisorConfig.getAdviceClassName());
- return instanceMethodAdvisorConfig.isOverrideArgs()
- ? new MethodAdvisor<>(methodPointcut, new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice))
- : new MethodAdvisor<>(methodPointcut, new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice));
+ private MethodAdvisor<?> getSingleMethodAdvisor(final InDefinedShape methodPointcut, final InstanceMethodAdvisorConfiguration advisorConfig) {
+ InstanceMethodAroundAdvice instanceMethodAroundAdvice = adviceFactory.getAdvice(advisorConfig.getAdviceClassName());
+ Object advice = advisorConfig.isOverrideArgs() ? new InstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvice) : new InstanceMethodAroundInterceptor(instanceMethodAroundAdvice);
+ return new MethodAdvisor<>(methodPointcut, advice);
}
- private MethodAdvisor<?> getComposeInstanceMethodPoint(final InDefinedShape methodPointcut) {
+ private MethodAdvisor<?> getComposedMethodAdvisor(final InDefinedShape methodPointcut) {
Collection<InstanceMethodAroundAdvice> instanceMethodAroundAdvices = new LinkedList<>();
boolean isArgsOverride = false;
- for (InstanceMethodAdvisorConfiguration each : instanceMethodAdvisorConfigs) {
+ for (InstanceMethodAdvisorConfiguration each : advisorConfigs) {
if (each.isOverrideArgs()) {
isArgsOverride = true;
}
@@ -122,8 +117,7 @@ public final class InstanceMethodAdvisorBuilder {
instanceMethodAroundAdvices.add(adviceFactory.getAdvice(each.getAdviceClassName()));
}
}
- return isArgsOverride
- ? new MethodAdvisor<>(methodPointcut, new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices))
- : new MethodAdvisor<>(methodPointcut, new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices));
+ Object advice = isArgsOverride ? new ComposedInstanceMethodInterceptorArgsOverride(instanceMethodAroundAdvices) : new ComposedInstanceMethodAroundInterceptor(instanceMethodAroundAdvices);
+ return new MethodAdvisor<>(methodPointcut, advice);
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
index 17cbb48b997..62003cc9698 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
@@ -23,7 +23,7 @@ import net.bytebuddy.dynamic.DynamicType.Builder;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.implementation.bind.annotation.Morph;
import net.bytebuddy.matcher.ElementMatchers;
-import org.apache.shardingsphere.agent.config.advisor.StaticMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.StaticMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
import org.apache.shardingsphere.agent.core.logging.LoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.OverrideArgsInvoker;
@@ -49,15 +49,15 @@ public final class StaticMethodAdvisorBuilder {
private static final LoggerFactory.Logger LOGGER = LoggerFactory.getLogger(StaticMethodAdvisorBuilder.class);
- private final Collection<StaticMethodAdvisorConfiguration> staticMethodAdvisorConfigs;
+ private final Collection<StaticMethodAdvisorConfiguration> advisorConfigs;
private final TypeDescription typePointcut;
private final AdviceFactory adviceFactory;
- public StaticMethodAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<StaticMethodAdvisorConfiguration> staticMethodAdvisorConfigs,
+ public StaticMethodAdvisorBuilder(final Map<String, PluginConfiguration> pluginConfigs, final Collection<StaticMethodAdvisorConfiguration> advisorConfigs,
final boolean isEnhancedForProxy, final TypeDescription typePointcut, final ClassLoader classLoader) {
- this.staticMethodAdvisorConfigs = staticMethodAdvisorConfigs;
+ this.advisorConfigs = advisorConfigs;
this.typePointcut = typePointcut;
adviceFactory = new AdviceFactory(classLoader, pluginConfigs, isEnhancedForProxy);
}
@@ -69,13 +69,10 @@ public final class StaticMethodAdvisorBuilder {
* @return created builder
*/
public Builder<?> create(final Builder<?> builder) {
- Collection<MethodAdvisor<?>> staticMethodAdvicePoints = typePointcut.getDeclaredMethods().stream()
- .filter(each -> each.isStatic() && !(each.isAbstract() || each.isSynthetic()))
- .map(this::getMatchedStaticMethodPoint)
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
Builder<?> result = builder;
- for (MethodAdvisor<?> each : staticMethodAdvicePoints) {
+ Collection<MethodAdvisor<?>> matchedAdvisors = typePointcut.getDeclaredMethods()
+ .stream().filter(each -> each.isStatic() && !(each.isAbstract() || each.isSynthetic())).map(this::getMatchedAdvisor).filter(Objects::nonNull).collect(Collectors.toList());
+ for (MethodAdvisor<?> each : matchedAdvisors) {
try {
if (each.getAdvice() instanceof StaticMethodInterceptorArgsOverride) {
result = result.method(ElementMatchers.is(each.getPointcut()))
@@ -92,28 +89,28 @@ public final class StaticMethodAdvisorBuilder {
return result;
}
- private MethodAdvisor<?> getMatchedStaticMethodPoint(final InDefinedShape methodPointcut) {
- List<StaticMethodAdvisorConfiguration> matchedAdvisors = staticMethodAdvisorConfigs.stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
- if (matchedAdvisors.isEmpty()) {
+ private MethodAdvisor<?> getMatchedAdvisor(final InDefinedShape methodPointcut) {
+ List<StaticMethodAdvisorConfiguration> matchedAdvisorConfigs = advisorConfigs.stream().filter(each -> each.getPointcut().matches(methodPointcut)).collect(Collectors.toList());
+ if (matchedAdvisorConfigs.isEmpty()) {
return null;
}
- if (1 == matchedAdvisors.size()) {
- return getSingleStaticMethodPoint(methodPointcut, matchedAdvisors.get(0));
+ if (1 == matchedAdvisorConfigs.size()) {
+ return getSingleMethodAdvisor(methodPointcut, matchedAdvisorConfigs.get(0));
}
- return getComposedStaticMethodPoint(methodPointcut);
+ return getComposedMethodAdvisor(methodPointcut);
}
- private MethodAdvisor<?> getSingleStaticMethodPoint(final InDefinedShape methodPointcut, final StaticMethodAdvisorConfiguration staticMethodAdvisorConfig) {
- StaticMethodAroundAdvice staticMethodAroundAdvice = adviceFactory.getAdvice(staticMethodAdvisorConfig.getAdviceClassName());
- return staticMethodAdvisorConfig.isOverrideArgs()
+ private MethodAdvisor<?> getSingleMethodAdvisor(final InDefinedShape methodPointcut, final StaticMethodAdvisorConfiguration advisorConfig) {
+ StaticMethodAroundAdvice staticMethodAroundAdvice = adviceFactory.getAdvice(advisorConfig.getAdviceClassName());
+ return advisorConfig.isOverrideArgs()
? new MethodAdvisor<>(methodPointcut, new StaticMethodInterceptorArgsOverride(staticMethodAroundAdvice))
: new MethodAdvisor<>(methodPointcut, new StaticMethodAroundInterceptor(staticMethodAroundAdvice));
}
- private MethodAdvisor<?> getComposedStaticMethodPoint(final InDefinedShape methodPointcut) {
+ private MethodAdvisor<?> getComposedMethodAdvisor(final InDefinedShape methodPointcut) {
Collection<StaticMethodAroundAdvice> staticMethodAroundAdvices = new LinkedList<>();
boolean isArgsOverride = false;
- for (StaticMethodAdvisorConfiguration each : staticMethodAdvisorConfigs) {
+ for (StaticMethodAdvisorConfiguration each : advisorConfigs) {
if (each.isOverrideArgs()) {
isArgsOverride = true;
}
@@ -121,7 +118,7 @@ public final class StaticMethodAdvisorBuilder {
staticMethodAroundAdvices.add(adviceFactory.getAdvice(each.getAdviceClassName()));
}
}
- return isArgsOverride ? new MethodAdvisor<>(methodPointcut, new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices))
- : new MethodAdvisor<>(methodPointcut, new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices));
+ Object advice = isArgsOverride ? new ComposedStaticMethodInterceptorArgsOverride(staticMethodAroundAdvices) : new ComposedStaticMethodAroundInterceptor(staticMethodAroundAdvices);
+ return new MethodAdvisor<>(methodPointcut, advice);
}
}
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 01e6476db71..3b7d812df42 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
@@ -24,9 +24,9 @@ import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
import net.bytebuddy.dynamic.scaffold.TypeValidation;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.ConstructorAdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.StaticMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.ConstructorAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.StaticMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
import org.apache.shardingsphere.agent.core.logging.LoggingListener;
import org.apache.shardingsphere.agent.core.mock.advice.MockConstructorAdvice;
diff --git a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingAdvisorDefinitionService.java b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingAdvisorDefinitionService.java
index 1772ea6fbe0..01b9808303f 100644
--- a/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingAdvisorDefinitionService.java
+++ b/agent/plugins/logging/base/src/main/java/org/apache/shardingsphere/agent/plugin/logging/base/definition/BaseLoggingAdvisorDefinitionService.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.agent.plugin.logging.base.definition;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.StaticMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.StaticMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfigurationRegistryFactory;
import org.apache.shardingsphere.agent.plugin.logging.base.advice.MetaDataContextsFactoryAdvice;
import org.apache.shardingsphere.agent.spi.advisor.AdvisorDefinitionService;
diff --git a/agent/plugins/metrics/type/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusAdvisorDefinitionService.java b/agent/plugins/metrics/type/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusAdvisorDefinitionService.java
index 9866165be5c..8327161a357 100644
--- a/agent/plugins/metrics/type/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusAdvisorDefinitionService.java
+++ b/agent/plugins/metrics/type/prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/definition/PrometheusAdvisorDefinitionService.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.agent.metrics.prometheus.definition;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.ConstructorAdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.StaticMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.ConstructorAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.StaticMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfigurationRegistryFactory;
import org.apache.shardingsphere.agent.core.plugin.yaml.entity.YamlAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.yaml.entity.YamlPointcutConfiguration;
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
index d039372b66c..24332a9420a 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/CommandExecutorTaskAdviser.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.impl;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfigurationRegistryFactory;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.TracingAdviser;
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
index ac75c1b1ed4..438bd5ad825 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/JDBCExecutorCallbackAdviser.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.impl;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfigurationRegistryFactory;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.TracingAdviser;
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
index dfb35259afa..8b28a9989ee 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/adviser/impl/SQLParserEngineAdviser.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.impl;
import lombok.RequiredArgsConstructor;
import net.bytebuddy.matcher.ElementMatchers;
import org.apache.shardingsphere.agent.config.advisor.AdvisorConfiguration;
-import org.apache.shardingsphere.agent.config.advisor.InstanceMethodAdvisorConfiguration;
+import org.apache.shardingsphere.agent.config.advisor.method.type.InstanceMethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfigurationRegistryFactory;
import org.apache.shardingsphere.agent.core.plugin.advice.InstanceMethodAroundAdvice;
import org.apache.shardingsphere.agent.plugin.tracing.core.advice.adviser.TracingAdviser;