public final class ServiceFactoryFactory
This class is not intended for end users.
Provide factory instances for AppEngine APIs. Each API will have an associated FactoryProvider registered with this class. N.B. Once <xref uid="com.google.appengine.spi.ServiceFactoryFactory.
To construct the runtime mapping, this class first uses java.util.ServiceLoader
to
find all registered FactoryProvider entities using the ClassLoader
of
ServiceFactoryFactory
. Finally, the explicitly registered providers
<xref uid="com.google.appengine.spi.ServiceFactoryFactory.register(com.google.appengine.spi.FactoryProvider<I>)" data-throw-if-not-resolved="false">#register(FactoryProvider) are merged in.
If ServiceLoader
locates multiple providers for a given factory interface, the
ambiguity can be resolved by using the ServiceProvider#precedence annotation property
(higher precedence wins; the google implementations all have precedence
Integer.MIN_VALUE). An exception is raised if the ambiguity cannot be resolved. Note that
explicit registration (<xref uid="com.google.appengine.spi.ServiceFactoryFactory.register(com.google.appengine.spi.FactoryProvider<I>)" data-throw-if-not-resolved="false">#register(FactoryProvider)) always takes precedence (it does not
honor the ServiceProvider#precedence annotation property).
Static Fields
USE_THREAD_CONTEXT_CLASSLOADER_PROPERTY
public static final String USE_THREAD_CONTEXT_CLASSLOADER_PROPERTY
If this system property is set to "true" the thread context classloader is used (if non-null) when looking up API service implementations. Otherwise the class loader of this class is used.
Field Value | |
---|---|
Type | Description |
String |
Static Methods
<I>register(FactoryProvider<I> p)
public static synchronized void <I>register(FactoryProvider<I> p)
Explicitly register a provider. This does not take the precedence (see FactoryProvider#getPrecedence()) of the provider into consideration; subsequent registrations will always override previous ones.
Parameter | |
---|---|
Name | Description |
p |
FactoryProvider<I> The provider to register |
<T>getFactory(Class<T> base)
public static T <T>getFactory(Class<T> base)
Used by AppEngine service factories. Returns an instance of the factory implementing the
interface provide by base
. Since there must always be a provider registered for a given
base, an error will be raised if no appropriate registration is found.
Parameter | |
---|---|
Name | Description |
base |
Class<T> The returned factory must extend this class. |
Returns | |
---|---|
Type | Description |
T |
Constructors
ServiceFactoryFactory()
public ServiceFactoryFactory()