Module org.apache.lucene.core
Package org.apache.lucene.analysis
Class AnalysisSPILoader<S extends AbstractAnalysisFactory>
- java.lang.Object
-
- org.apache.lucene.analysis.AnalysisSPILoader<S>
-
public final class AnalysisSPILoader<S extends AbstractAnalysisFactory> extends java.lang.Object
Helper class for loading named SPIs from classpath (e.g. Tokenizers, TokenStreams).
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Class<S>
clazz
private java.util.Set<java.lang.String>
originalNames
private static java.util.regex.Pattern
SERVICE_NAME_PATTERN
private java.util.Map<java.lang.String,java.lang.Class<? extends S>>
services
-
Constructor Summary
Constructors Constructor Description AnalysisSPILoader(java.lang.Class<S> clazz)
AnalysisSPILoader(java.lang.Class<S> clazz, java.lang.ClassLoader classloader)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.Set<java.lang.String>
availableServices()
private boolean
isValidName(java.lang.String name)
java.lang.Class<? extends S>
lookupClass(java.lang.String name)
static java.lang.String
lookupSPIName(java.lang.Class<? extends AbstractAnalysisFactory> service)
Looks up SPI name (static "NAME" field) with appropriate modifiers.static <T extends AbstractAnalysisFactory>
TnewFactoryClassInstance(java.lang.Class<T> clazz, java.util.Map<java.lang.String,java.lang.String> args)
Creates a new instance of the givenAbstractAnalysisFactory
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 givenClassLoader
.
-
-
-
Field Detail
-
services
private volatile java.util.Map<java.lang.String,java.lang.Class<? extends S extends AbstractAnalysisFactory>> services
-
originalNames
private volatile java.util.Set<java.lang.String> originalNames
-
clazz
private final java.lang.Class<S extends AbstractAnalysisFactory> clazz
-
SERVICE_NAME_PATTERN
private static final java.util.regex.Pattern SERVICE_NAME_PATTERN
-
-
Method Detail
-
reload
public void reload(java.lang.ClassLoader classloader)
Reloads the internal SPI list from the givenClassLoader
. Changes to the service list are visible after the method ends, all iterators (e.g., fromavailableServices()
,...) 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!
-
isValidName
private boolean isValidName(java.lang.String name)
-
newInstance
public S newInstance(java.lang.String name, java.util.Map<java.lang.String,java.lang.String> args)
-
lookupClass
public java.lang.Class<? extends S> lookupClass(java.lang.String name)
-
availableServices
public java.util.Set<java.lang.String> availableServices()
-
lookupSPIName
public static java.lang.String lookupSPIName(java.lang.Class<? extends AbstractAnalysisFactory> service) throws java.lang.NoSuchFieldException, java.lang.IllegalAccessException, java.lang.IllegalStateException
Looks up SPI name (static "NAME" field) with appropriate modifiers. Also it must be a String class and declared in the concrete class.- Returns:
- the SPI name
- Throws:
java.lang.NoSuchFieldException
- - if the "NAME" field is not defined.java.lang.IllegalAccessException
- - if the "NAME" field is inaccessible.java.lang.IllegalStateException
- - if the "NAME" field does not have appropriate modifiers or isn't a String field.
-
newFactoryClassInstance
public static <T extends AbstractAnalysisFactory> T newFactoryClassInstance(java.lang.Class<T> clazz, java.util.Map<java.lang.String,java.lang.String> args)
Creates a new instance of the givenAbstractAnalysisFactory
by invoking the constructor, passing the given argument map.
-
-