public final class AnalysisSPILoader<S extends AbstractAnalysisFactory>
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private java.lang.Class<S> |
clazz |
private java.util.Map<java.lang.String,java.lang.Class<? extends S>> |
services |
private java.lang.String[] |
suffixes |
Constructor and Description |
---|
AnalysisSPILoader(java.lang.Class<S> clazz) |
AnalysisSPILoader(java.lang.Class<S> clazz,
java.lang.ClassLoader loader) |
AnalysisSPILoader(java.lang.Class<S> clazz,
java.lang.String[] suffixes) |
AnalysisSPILoader(java.lang.Class<S> clazz,
java.lang.String[] suffixes,
java.lang.ClassLoader classloader) |
Modifier and Type | Method and Description |
---|---|
java.util.Set<java.lang.String> |
availableServices() |
java.lang.Class<? extends S> |
lookupClass(java.lang.String name) |
static <T extends AbstractAnalysisFactory> |
newFactoryClassInstance(java.lang.Class<T> clazz,
java.util.Map<java.lang.String,java.lang.String> args)
Creates a new instance of the given
AbstractAnalysisFactory by invoking the constructor, passing the given argument map. |
S |
newInstance(java.lang.String name,
java.util.Map<java.lang.String,java.lang.String> args) |
void |
reload(java.lang.ClassLoader classloader)
Reloads the internal SPI list from the given
ClassLoader . |
private volatile java.util.Map<java.lang.String,java.lang.Class<? extends S extends AbstractAnalysisFactory>> services
private final java.lang.Class<S extends AbstractAnalysisFactory> clazz
private final java.lang.String[] suffixes
public AnalysisSPILoader(java.lang.Class<S> clazz)
public AnalysisSPILoader(java.lang.Class<S> clazz, java.lang.ClassLoader loader)
public AnalysisSPILoader(java.lang.Class<S> clazz, java.lang.String[] suffixes)
public AnalysisSPILoader(java.lang.Class<S> clazz, java.lang.String[] suffixes, 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 (e.g., from availableServices()
,...) 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 S newInstance(java.lang.String name, java.util.Map<java.lang.String,java.lang.String> args)
public java.lang.Class<? extends S> lookupClass(java.lang.String name)
public java.util.Set<java.lang.String> availableServices()
public static <T extends AbstractAnalysisFactory> T newFactoryClassInstance(java.lang.Class<T> clazz, java.util.Map<java.lang.String,java.lang.String> args)
AbstractAnalysisFactory
by invoking the constructor, passing the given argument map.