public interface StrategySelector extends Service
Service which acts as a registry for named strategy implementations.
<p/>
Strategies are more open ended than services, though a strategy managed here might very well also be a service. The
strategy is any interface that has multiple, (possibly short) named implementations.
<p/>
StrategySelector manages resolution of particular implementation by (possibly short) name via the
selectStrategyImplementor(java.lang.Class<T>, java.lang.String) method, which is the main contract here. As indicated in the docs of that
method the given name might be either a short registered name or the implementation FQN. As an example, consider
resolving the TransactionCoordinatorBuilder implementation to use. To use the
JDBC-based TransactionCoordinatorBuilder the passed name might be either "jdbc" or
"org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl" (which is the FQN).
<p/>
Strategy implementations can be managed by registerStrategyImplementor(java.lang.Class<T>, java.lang.String, java.lang.Class<? extends T>) and
unRegisterStrategyImplementor(java.lang.Class<T>, java.lang.Class<? extends T>). Originally designed to help the OSGi use case, though no longer used there.
<p/>
The service also exposes a general typing API via resolveStrategy(java.lang.Class<T>, java.lang.Object) and resolveDefaultableStrategy(java.lang.Class<T>, java.lang.Object, T)
which accept implementation references rather than implementation names, allowing for a multitude of interpretations
of said "implementation reference". See the docs for resolveDefaultableStrategy(java.lang.Class<T>, java.lang.Object, T) for details.
| Modifier and Type | Method and Description |
|---|---|
<T> Collection<Class<? extends T>> |
getRegisteredStrategyImplementors(Class<T> strategy)
Retrieve all of the registered implementors of the given strategy.
|
<T> void |
registerStrategyImplementor(Class<T> strategy,
String name,
Class<? extends T> implementation)
Registers a named implementor of a particular strategy contract.
|
<T> T |
resolveDefaultableStrategy(Class<T> strategy,
Object strategyReference,
Callable<T> defaultResolver)
Resolve strategy instances.
|
<T> T |
resolveDefaultableStrategy(Class<T> strategy,
Object strategyReference,
T defaultValue)
Resolve strategy instances.
|
<T> T |
resolveStrategy(Class<T> strategy,
Object strategyReference)
Resolve strategy instances.
|
<T> T |
resolveStrategy(Class<T> strategy,
Object strategyReference,
Callable<T> defaultResolver,
StrategyCreator<T> creator) |
<T> T |
resolveStrategy(Class<T> strategy,
Object strategyReference,
T defaultValue,
StrategyCreator<T> creator) |
<T> Class<? extends T> |
selectStrategyImplementor(Class<T> strategy,
String name)
Locate the named strategy implementation.
|
<T> void |
unRegisterStrategyImplementor(Class<T> strategy,
Class<? extends T> implementation)
Un-registers a named implementor of a particular strategy contract.
|
<T> void registerStrategyImplementor(Class<T> strategy, String name, Class<? extends T> implementation)
Registers a named implementor of a particular strategy contract.
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The strategy contract.name - The registration nameimplementation - The implementation Class<T> void unRegisterStrategyImplementor(Class<T> strategy, Class<? extends T> implementation)
Un-registers a named implementor of a particular strategy contract. Un-registers all named registrations for the given strategy contract naming the given class.
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The strategy contract.implementation - The implementation Class<T> Class<? extends T> selectStrategyImplementor(Class<T> strategy, String name)
Locate the named strategy implementation.
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The type of strategy to be resolved.name - The name of the strategy to locate; might be either a registered name or the implementation FQN.<T> T resolveStrategy(Class<T> strategy, Object strategyReference)
Resolve strategy instances. See discussion on resolveDefaultableStrategy(java.lang.Class<T>, java.lang.Object, T).
Only difference is that here, the implied default value is null.
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The type (interface) of the strategy to be resolved.strategyReference - The reference to the strategy for which we need to resolve an instance.<T> T resolveDefaultableStrategy(Class<T> strategy, Object strategyReference, T defaultValue)
Resolve strategy instances. The incoming reference might be:<ul>
<li>
null - in which case defaultValue is returned.
</li>
<li>
An actual instance of the strategy type - it is returned, as is
</li>
<li>
A reference to the implementation Class - an instance is created by calling
Class.newInstance() (aka, the class’s no-arg ctor).
</li>
<li>
The name of the implementation class - First the implementation’s Class reference
is resolved, and then an instance is created by calling Class.newInstance()
</li>
</ul>
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The type (interface) of the strategy to be resolved.strategyReference - The reference to the strategy for which we need to resolve an instance.defaultValue - THe default value to use if strategyReference is null<T> T resolveDefaultableStrategy(Class<T> strategy, Object strategyReference, Callable<T> defaultResolver)
Resolve strategy instances. The incoming reference might be:<ul>
<li>
null - in which case defaultValue is returned.
</li>
<li>
An actual instance of the strategy type - it is returned, as is
</li>
<li>
A reference to the implementation Class - an instance is created by calling
Class.newInstance() (aka, the class’s no-arg ctor).
</li>
<li>
The name of the implementation class - First the implementation’s Class reference
is resolved, and then an instance is created by calling Class.newInstance()
</li>
</ul>
T - The type of the strategy. Used to make sure that the strategy and implementation are type
compatible.strategy - The type (interface) of the strategy to be resolved.strategyReference - The reference to the strategy for which we need to resolve an instance.defaultResolver - A strategy for resolving the default value strategyReference resolves to null.<T> T resolveStrategy(Class<T> strategy, Object strategyReference, Callable<T> defaultResolver, StrategyCreator<T> creator)
<T> T resolveStrategy(Class<T> strategy, Object strategyReference, T defaultValue, StrategyCreator<T> creator)
<T> Collection<Class<? extends T>> getRegisteredStrategyImplementors(Class<T> strategy)
Retrieve all of the registered implementors of the given strategy. Useful to allow defaulting the choice to the single registered implementor when only one is registered
nullCopyright © 2001-2018 Red Hat, Inc. All Rights Reserved.