This is an automated email from the ASF dual-hosted git repository.
panjuan 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 9ef847a4dcf Refactor AgentPluginLoader (#22851)
9ef847a4dcf is described below
commit 9ef847a4dcf77c3637c0e7cf60f05efd55fd00be
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Dec 13 17:59:34 2022 +0800
Refactor AgentPluginLoader (#22851)
---
.../agent/core/plugin/AgentPluginLoader.java | 38 +++++++---------------
1 file changed, 12 insertions(+), 26 deletions(-)
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 a9fc20f346d..2863194ae64 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
@@ -42,7 +42,9 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Function;
import java.util.jar.JarFile;
+import java.util.stream.Collectors;
/**
* Agent plugin loader.
@@ -67,7 +69,7 @@ public final class AgentPluginLoader implements PluginLoader {
public void load() throws IOException {
loadPluginJars();
AgentClassLoader.initDefaultPluginClassLoader(pluginJars);
-
loadAllPluginInterceptorPoint(AgentClassLoader.getDefaultPluginClassloader());
+ pointcuts =
loadClassPointcuts(AgentClassLoader.getDefaultPluginClassloader());
}
private void loadPluginJars() throws IOException {
@@ -82,11 +84,16 @@ public final class AgentPluginLoader implements
PluginLoader {
PluginJarHolder.setPluginJars(pluginJars);
}
- private void loadAllPluginInterceptorPoint(final ClassLoader classLoader) {
+ private Map<String, ClassPointcuts> loadClassPointcuts(final ClassLoader
classLoader) {
+ Map<String, ClassPointcuts> result = new HashMap<>();
Collection<String> pluginNames = getPluginNames();
- Map<String, ClassPointcuts> pointMap = new HashMap<>();
- loadPluginDefinitionServices(pluginNames, pointMap, classLoader);
- pointcuts = ImmutableMap.<String,
ClassPointcuts>builder().putAll(pointMap).build();
+ for (PointcutDefinitionService each :
PluginServiceLoader.newServiceInstances(PointcutDefinitionService.class,
classLoader)) {
+ if (pluginNames.contains(each.getType())) {
+ result.putAll(
+ new
PointcutDefinitionServiceEngine(each).getAllPointcuts(isEnhancedForProxy).stream().collect(Collectors.toMap(ClassPointcuts::getTargetClassName,
Function.identity())));
+ }
+ }
+ return ImmutableMap.<String,
ClassPointcuts>builder().putAll(result).build();
}
private Collection<String> getPluginNames() {
@@ -98,27 +105,6 @@ public final class AgentPluginLoader implements
PluginLoader {
return result;
}
- private void loadPluginDefinitionServices(final Collection<String>
pluginNames, final Map<String, ClassPointcuts> pointMap, final ClassLoader
classLoader) {
-
PluginServiceLoader.newServiceInstances(PointcutDefinitionService.class,
classLoader)
- .stream()
- .filter(each -> pluginNames.contains(each.getType()))
- .forEach(each -> buildPluginInterceptorPointMap(each,
pointMap));
- }
-
- private void buildPluginInterceptorPointMap(final
PointcutDefinitionService pointcutDefinitionService, final Map<String,
ClassPointcuts> pointMap) {
- new
PointcutDefinitionServiceEngine(pointcutDefinitionService).getAllPointcuts(isEnhancedForProxy).forEach(each
-> {
- String target = each.getTargetClassName();
- if (pointMap.containsKey(target)) {
- ClassPointcuts classPointcuts = pointMap.get(target);
-
classPointcuts.getConstructorPointcuts().addAll(each.getConstructorPointcuts());
-
classPointcuts.getInstanceMethodPointcuts().addAll(each.getInstanceMethodPointcuts());
-
classPointcuts.getStaticMethodPointcuts().addAll(each.getStaticMethodPointcuts());
- } else {
- pointMap.put(target, each);
- }
- });
- }
-
/**
* To find all intercepting target classes then to build TypeMatcher.
*