public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI>
extends java.lang.Object
implements java.lang.Iterable<S>
Modifier and Type | Class and Description |
---|---|
static interface |
NamedSPILoader.NamedSPI
Interface to support
lookup(String) by name. |
Modifier and Type | Field and Description |
---|---|
private java.lang.Class<S> |
clazz |
private java.util.Map<java.lang.String,S> |
services |
Constructor and Description |
---|
NamedSPILoader(java.lang.Class<S> clazz) |
NamedSPILoader(java.lang.Class<S> clazz,
java.lang.ClassLoader classloader) |
Modifier and Type | Method and Description |
---|---|
java.util.Set<java.lang.String> |
availableServices() |
static void |
checkServiceName(java.lang.String name)
Validates that a service name meets the requirements of
NamedSPILoader.NamedSPI |
private static boolean |
isLetterOrDigit(char c)
Checks whether a character is a letter or digit (ascii) which are defined in the spec.
|
java.util.Iterator<S> |
iterator() |
S |
lookup(java.lang.String name) |
void |
reload(java.lang.ClassLoader classloader)
Reloads the internal SPI list from the given
ClassLoader . |
private volatile java.util.Map<java.lang.String,S extends NamedSPILoader.NamedSPI> services
private final java.lang.Class<S extends NamedSPILoader.NamedSPI> clazz
public NamedSPILoader(java.lang.Class<S> clazz)
public NamedSPILoader(java.lang.Class<S> clazz, java.lang.ClassLoader classloader)
public void reload(java.lang.ClassLoader classloader)
ClassLoader
.
Changes to the service list are visible after the method ends, all
iterators (iterator()
,...) stay consistent.
NOTE: Only new service providers are added, existing ones are never removed or replaced.
This method is expensive and should only be called for discovery of new service providers on the given classpath/classloader!
public static void checkServiceName(java.lang.String name)
NamedSPILoader.NamedSPI
private static boolean isLetterOrDigit(char c)
public S lookup(java.lang.String name)
public java.util.Set<java.lang.String> availableServices()
public java.util.Iterator<S> iterator()
iterator
in interface java.lang.Iterable<S extends NamedSPILoader.NamedSPI>