diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java index f5ed142165edf..fd1ecb55da4b0 100644 --- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java +++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/AgentServiceLoader.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.agent.core.spi; import com.google.common.base.Preconditions; +import lombok.Getter; import java.util.Collection; import java.util.LinkedList; @@ -28,17 +29,29 @@ /** * Agent service loader. */ +@Getter public final class AgentServiceLoader { private static final Map, AgentServiceLoader> LOADERS = new ConcurrentHashMap<>(); - private final Map, Collection> serviceMap = new ConcurrentHashMap<>(); - - private final Class service; + private final Collection services; private AgentServiceLoader(final Class service) { - this.service = service; - register(service); + validate(service); + this.services = register(service); + } + + private void validate(final Class service) { + Preconditions.checkNotNull(service, "Extension clazz is null."); + Preconditions.checkArgument(service.isInterface(), "Extension clazz `%s` is not interface.", service); + } + + private Collection register(final Class service) { + Collection result = new LinkedList<>(); + for (T each : ServiceLoader.load(service)) { + result.add(each); + } + return result; } /** @@ -50,29 +63,6 @@ private AgentServiceLoader(final Class service) { */ @SuppressWarnings("unchecked") public static AgentServiceLoader getServiceLoader(final Class service) { - Preconditions.checkNotNull(service, "Extension clazz is null."); - Preconditions.checkArgument(service.isInterface(), "Extension clazz `%s` is not interface.", service); - AgentServiceLoader agentServiceLoader = (AgentServiceLoader) LOADERS.get(service); - if (null != agentServiceLoader) { - return agentServiceLoader; - } return (AgentServiceLoader) LOADERS.computeIfAbsent(service, AgentServiceLoader::new); } - - /** - * New service instances. - * - * @return service instances - */ - public Collection newServiceInstances() { - return serviceMap.get(service); - } - - private void register(final Class service) { - if (serviceMap.containsKey(service)) { - return; - } - serviceMap.put(service, new LinkedList<>()); - ServiceLoader.load(service).forEach(each -> serviceMap.get(service).add(each)); - } } diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java index c5a5acb782af2..682c7abee1020 100644 --- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java +++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/spi/PluginBootServiceRegistry.java @@ -39,7 +39,7 @@ public final class PluginBootServiceRegistry { * @return registered service */ public static Optional getRegisteredService(final String type) { - return AgentServiceLoader.getServiceLoader(PluginBootService.class).newServiceInstances().stream().filter(each -> each.getType().equalsIgnoreCase(type)).findFirst(); + return AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices().stream().filter(each -> each.getType().equalsIgnoreCase(type)).findFirst(); } /** @@ -48,7 +48,7 @@ public static Optional getRegisteredService(final String type * @return registered services */ public static Collection getAllRegisteredServices() { - return AgentServiceLoader.getServiceLoader(PluginBootService.class).newServiceInstances(); + return AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices(); } /**