public class ServiceLocatorImpl extends Object implements ServiceLocator
| Constructor and Description |
|---|
ServiceLocatorImpl(String name,
ServiceLocatorImpl parent)
Called by the Generator, and hence must be a public method
|
| Modifier and Type | Method and Description |
|---|---|
<T> T |
create(Class<T> createMe)
This method will analyze the given class, and create it if can.
|
<T> T |
create(Class<T> createMe,
String strategy)
This method will analyze the given class, and create it if can.
|
<U> U |
createAndInitialize(Class<U> createMe)
Creates, injects and postConstructs, all in one
|
<U> U |
createAndInitialize(Class<U> createMe,
String strategy)
Creates, injects and postConstructs, all in one
|
List<ServiceHandle<?>> |
getAllServiceHandles(Annotation qualifier,
Annotation... qualifiers)
Gets a list of
ServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteria |
<T> List<ServiceHandle<T>> |
getAllServiceHandles(Class<T> contractOrImpl,
Annotation... qualifiers)
Gets a list of
ServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteria |
List<ServiceHandle<?>> |
getAllServiceHandles(Filter searchCriteria)
Gets a list of
ServiceHandle whose ActiveDescriptors match
the supplied filter. |
List<ServiceHandle<?>> |
getAllServiceHandles(Type contractOrImpl,
Annotation... qualifiers)
Gets a list of
ServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteria |
<T> List<T> |
getAllServices(Annotation qualifier,
Annotation... qualifiers)
Gets all services from this locator that have the provided qualifiers
|
<T> List<T> |
getAllServices(Class<T> contractOrImpl,
Annotation... qualifiers)
Gets all services from this locator that implement this contract or have this
implementation and have the provided qualifiers
|
List<?> |
getAllServices(Filter searchCriteria)
Gets all services from this locator that match the provided
Filter |
<T> List<T> |
getAllServices(Type contractOrImpl,
Annotation... qualifiers)
Gets all services from this locator that implement this contract or have this
implementation and have the provided qualifiers
|
ActiveDescriptor<?> |
getBestDescriptor(Filter filter)
Gets the descriptor that best matches this filter, taking ranking
and service id into account
|
String |
getDefaultClassAnalyzerName()
Gets the name of the default class analyzer service
|
Unqualified |
getDefaultUnqualified()
This returns the default
Unqualified annotation that will be
put on all injection points that do not have any qualifiers. |
List<ActiveDescriptor<?>> |
getDescriptors(Filter filter)
Gets the list of descriptors that match the given filter
|
ActiveDescriptor<?> |
getInjecteeDescriptor(Injectee injectee)
This method will first find a descriptor for this injectee, and then
reify that descriptor.
|
long |
getLocatorId()
This returns the unique locator ID for this locator.
|
String |
getName()
Returns the name of this ServiceLocator
|
boolean |
getNeutralContextClassLoader()
This returns the value of neutralContextClassLoader.
|
ServiceLocator |
getParent()
Gets the parent service locator for this locator
|
<T> T |
getService(ActiveDescriptor<T> activeDescriptor,
ServiceHandle<?> root)
Deprecated.
|
<T> T |
getService(ActiveDescriptor<T> activeDescriptor,
ServiceHandle<?> root,
Injectee originalRequest)
This method should be called by code resolving injectee's on behalf of some
root service, usually by an implementation of
InjectionResolver.resolve(Injectee, ServiceHandle). |
<T> T |
getService(Class<T> contractOrImpl,
Annotation... qualifiers)
Gets the best service from this locator that implements
this contract or has this implementation
|
<T> T |
getService(Class<T> contractOrImpl,
String name,
Annotation... qualifiers)
Gets the best service from this locator that implements
this contract or has this implementation and has the given
name
|
<T> T |
getService(Type contractOrImpl,
Annotation... qualifiers)
Gets the best service from this locator that implements
this contract or has this implementation
|
<T> T |
getService(Type contractOrImpl,
String name,
Annotation... qualifiers)
Gets the best service from this locator that implements
this contract or has this implementation and has the given
name
|
<T> ServiceHandle<T> |
getServiceHandle(ActiveDescriptor<T> activeDescriptor)
Gets a
ServiceHandle that can be used to get and destroy the service
described by the ActiveDescriptor. |
<T> ServiceHandle<T> |
getServiceHandle(ActiveDescriptor<T> activeDescriptor,
Injectee injectee)
Gets a
ServiceHandle that can be used to get and destroy the service
described by the ActiveDescriptor. |
<T> ServiceHandle<T> |
getServiceHandle(Class<T> contractOrImpl,
Annotation... qualifiers)
Gets a
ServiceHandle that can be used to get and destroy the
service that best matches the given criteria |
<T> ServiceHandle<T> |
getServiceHandle(Class<T> contractOrImpl,
String name,
Annotation... qualifiers)
Gets a
ServiceHandle that can be used to get and destroy the
service that best matches the given criteria |
<T> ServiceHandle<T> |
getServiceHandle(Type contractOrImpl,
Annotation... qualifiers)
Gets a
ServiceHandle that can be used to get and destroy the
service that best matches the given criteria |
<T> ServiceHandle<T> |
getServiceHandle(Type contractOrImpl,
String name,
Annotation... qualifiers)
Gets a
ServiceHandle that can be used to get and destroy the
service that best matches the given criteria |
ServiceLocatorState |
getState()
Returns the current state of this service locator.
|
void |
inject(Object injectMe)
This will analyze the given object and inject into its fields and methods.
|
void |
inject(Object injectMe,
String strategy)
This will analyze the given object and inject into its fields and methods.
|
void |
postConstruct(Object postConstructMe)
This will analyze the given object and call the postConstruct method.
|
void |
postConstruct(Object postConstructMe,
String strategy)
This will analyze the given object and call the postConstruct method.
|
void |
preDestroy(Object preDestroyMe)
This will analyze the given object and call the preDestroy method.
|
void |
preDestroy(Object preDestroyMe,
String strategy)
This will analyze the given object and call the preDestroy method.
|
ActiveDescriptor<?> |
reifyDescriptor(Descriptor descriptor)
Converts a descriptor to an ActiveDescriptor.
|
ActiveDescriptor<?> |
reifyDescriptor(Descriptor descriptor,
Injectee injectee)
Converts a descriptor to an ActiveDescriptor.
|
void |
setDefaultClassAnalyzerName(String defaultClassAnalyzer)
Sets the name of the default class analyzer that should be used for all
Descriptors that return null as their class analyzer. |
void |
setDefaultUnqualified(Unqualified unqualified)
This sets the default
Unqualified annotation that will be
put on all injection points that do not have any qualifiers. |
void |
setNeutralContextClassLoader(boolean neutralContextClassLoader)
This sets the value of neutralContextClassLoader.
|
void |
shutdown()
This method will shutdown every service associated with this ServiceLocator.
|
String |
toString() |
public ServiceLocatorImpl(String name, ServiceLocatorImpl parent)
name - The name of this locatorparent - The parent of this locator (may be null)public List<ActiveDescriptor<?>> getDescriptors(Filter filter)
ServiceLocatorgetDescriptors in interface ServiceLocatorfilter - A filter to use when determining which services should applypublic ActiveDescriptor<?> getBestDescriptor(Filter filter)
ServiceLocatorgetBestDescriptor in interface ServiceLocatorfilter - The non-null filter to use to retrieve the best descriptorpublic ActiveDescriptor<?> reifyDescriptor(Descriptor descriptor, Injectee injectee) throws MultiException
ServiceLocatorreifyDescriptor in interface ServiceLocatordescriptor - The descriptor to convert, may not be nullinjectee - The injectee on behalf of whom this descriptor is being injected. May
be null if the injectee is unknownHK2LoaderMultiException - if there were errors when loading or analyzing the classpublic ActiveDescriptor<?> reifyDescriptor(Descriptor descriptor) throws MultiException
ServiceLocatorreifyDescriptor in interface ServiceLocatordescriptor - The descriptor to convert, may not be nullHK2LoaderMultiException - if there were errors when loading or analyzing the classpublic ActiveDescriptor<?> getInjecteeDescriptor(Injectee injectee) throws MultiException
ServiceLocator
This method is responsible for using the available JustInTimeInjectionResolver
to add in new descriptors should the descriptor for the given injectee
not be found initially
getInjecteeDescriptor in interface ServiceLocatorinjectee - the injection point for whom to find the ActiveDescriptorMultiException - if there were errors when loading or analyzing the classpublic <T> ServiceHandle<T> getServiceHandle(ActiveDescriptor<T> activeDescriptor, Injectee injectee) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the service
described by the ActiveDescriptor. The injectee may be used to discover
the proper classloader to use when attempting to reify the ActiveDescriptorgetServiceHandle in interface ServiceLocatoractiveDescriptor - The descriptor for which to create a ServiceHandle.
May not be nullinjectee - The injectee on behalf of whom this service is being injected. May
be null if the injectee is unknownServiceHandle that may be used to create or destroy the service
associated with this ActiveDescriptorMultiException - if there was an error during service handle creationpublic <T> ServiceHandle<T> getServiceHandle(ActiveDescriptor<T> activeDescriptor) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the service
described by the ActiveDescriptor.getServiceHandle in interface ServiceLocatoractiveDescriptor - The descriptor for which to create a ServiceHandle.
May not be nullServiceHandle that may be used to create or destroy the service
associated with this ActiveDescriptorMultiException - if there was an error during service handle creation@Deprecated public <T> T getService(ActiveDescriptor<T> activeDescriptor, ServiceHandle<?> root) throws MultiException
ServiceLocatorInjectionResolver.resolve(Injectee, ServiceHandle). In
this way the objects associated with the root object can be destroyed in the proper sequencegetService in interface ServiceLocatoractiveDescriptor - The descriptor whose service to createroot - The ultimate parent of this service creation. May be nullMultiException - if there was an error during service creationpublic <T> T getService(ActiveDescriptor<T> activeDescriptor, ServiceHandle<?> root, Injectee originalRequest) throws MultiException
ServiceLocatorInjectionResolver.resolve(Injectee, ServiceHandle). In
this way the objects associated with the root object can be destroyed in the proper sequencegetService in interface ServiceLocatoractiveDescriptor - The descriptor whose service to createroot - The ultimate parent of this service creation. May be nulloriginalRequest - The injectee passed into the InjectionResolver.resolve(Injectee, ServiceHandle) if known,
null otherwiseMultiException - if there was an error during service creationpublic <T> T getService(Class<T> contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getServiceHandle(Class, Annotation...)
getService in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> T getService(Type contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getServiceHandle(Type, Annotation...)
getService in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> T getService(Class<T> contractOrImpl, String name, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getServiceHandle(Class, String, Annotation...)
getService in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofname - May be null (to indicate any name is ok), and is the name of the
implementation to be returnedqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> T getService(Type contractOrImpl, String name, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getServiceHandle(Type, String, Annotation...)
getService in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofname - May be null (to indicate any name is ok), and is the name of the
implementation to be returnedqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> List<T> getAllServices(Class<T> contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getAllServiceHandles(Class, Annotation...)
getAllServices in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> List<T> getAllServices(Type contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getAllServiceHandles(Type, Annotation...)
getAllServices in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> List<T> getAllServices(Annotation qualifier, Annotation... qualifiers) throws MultiException
ServiceLocator
Use this method only if destroying the services is not important,
otherwise use ServiceLocator.getAllServiceHandles(Annotation, Annotation...)
getAllServices in interface ServiceLocatorqualifier - May not be null, and is a qualifier that must
match the service definitionqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic List<?> getAllServices(Filter searchCriteria) throws MultiException
ServiceLocatorFilter
Use this method only if destroying the service is not important,
otherwise use ServiceLocator.getAllServiceHandles(Filter)
This method should also be used with care to avoid classloading a large number of services
getAllServices in interface ServiceLocatorsearchCriteria - The returned service will match the Filter
(in other words, searchCriteria.matches returns true). May not
be nullMultiException - if there was an error during service creationpublic String getName()
ServiceLocatorgetName in interface ServiceLocatorpublic ServiceLocatorState getState()
ServiceLocatorgetState in interface ServiceLocatorpublic void shutdown()
ServiceLocatorshutdown in interface ServiceLocatorpublic <T> T create(Class<T> createMe)
ServiceLocatorcreate in interface ServiceLocatorcreateMe - The class to create, may not be nullpublic <T> T create(Class<T> createMe, String strategy)
ServiceLocatorcreate in interface ServiceLocatorcreateMe - The class to create, may not be nullstrategy - The name of the ClassAnalyzer that should be used. If
null the default analyzer will be usedpublic void inject(Object injectMe)
ServiceLocatorinject in interface ServiceLocatorinjectMe - The object to be analyzed and injected intopublic void inject(Object injectMe, String strategy)
ServiceLocatorinject in interface ServiceLocatorinjectMe - The object to be analyzed and injected intostrategy - The name of the ClassAnalyzer that should be used. If
null the default analyzer will be usedpublic void postConstruct(Object postConstructMe)
ServiceLocatorpostConstruct in interface ServiceLocatorpostConstructMe - The object to postConstructpublic void postConstruct(Object postConstructMe, String strategy)
ServiceLocatorpostConstruct in interface ServiceLocatorpostConstructMe - The object to postConstructstrategy - The name of the ClassAnalyzer that should be used. If
null the default analyzer will be usedpublic void preDestroy(Object preDestroyMe)
ServiceLocatorpreDestroy in interface ServiceLocatorpreDestroyMe - The object to preDestroypublic void preDestroy(Object preDestroyMe, String strategy)
ServiceLocatorpreDestroy in interface ServiceLocatorpreDestroyMe - The object to preDestroystrategy - The name of the ClassAnalyzer that should be used. If
null the default analyzer will be usedpublic <U> U createAndInitialize(Class<U> createMe)
createAndInitialize in interface ServiceLocatorcreateMe - The non-null class to create this object frompublic <U> U createAndInitialize(Class<U> createMe, String strategy)
createAndInitialize in interface ServiceLocatorcreateMe - The non-null class to create this object fromstrategy - The name of the ClassAnalyzer that should be used. If
null the default analyzer will be usedpublic <T> ServiceHandle<T> getServiceHandle(Class<T> contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the
service that best matches the given criteriagetServiceHandle in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> ServiceHandle<T> getServiceHandle(Type contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the
service that best matches the given criteriagetServiceHandle in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> List<ServiceHandle<T>> getAllServiceHandles(Class<T> contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteriagetAllServiceHandles in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic List<ServiceHandle<?>> getAllServiceHandles(Type contractOrImpl, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteriagetAllServiceHandles in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> ServiceHandle<T> getServiceHandle(Class<T> contractOrImpl, String name, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the
service that best matches the given criteriagetServiceHandle in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofname - The name to use to further qualify the search (may be null,
indicating that any name will match)qualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic <T> ServiceHandle<T> getServiceHandle(Type contractOrImpl, String name, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy the
service that best matches the given criteriagetServiceHandle in interface ServiceLocatorcontractOrImpl - May not be null, and is the contract
or concrete implementation to get the best instance ofname - The name to use to further qualify the search (may be null,
indicating that any name will match)qualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic List<ServiceHandle<?>> getAllServiceHandles(Filter searchCriteria) throws MultiException
ServiceLocatorServiceHandle whose ActiveDescriptors match
the supplied filter. The returned ServiceHandles may be used to
get or destroy the services associated with the matching descriptorsgetAllServiceHandles in interface ServiceLocatorsearchCriteria - A filter to use when determining which descriptors should applyMultiException - if there was an error during service handle creationpublic List<ServiceHandle<?>> getAllServiceHandles(Annotation qualifier, Annotation... qualifiers) throws MultiException
ServiceLocatorServiceHandle that can be used to get and destroy services
associated with descriptors that match the provided criteriagetAllServiceHandles in interface ServiceLocatorqualifier - May not be null, and is a qualifier that must
match the service definitionqualifiers - The set of qualifiers that must match this service
definitionMultiException - if there was an error during service creationpublic long getLocatorId()
ServiceLocatorgetLocatorId in interface ServiceLocatorpublic String getDefaultClassAnalyzerName()
ServiceLocatorgetDefaultClassAnalyzerName in interface ServiceLocatorpublic void setDefaultClassAnalyzerName(String defaultClassAnalyzer)
ServiceLocatorDescriptors that return null as their class analyzer. If null is given
then the default class analyzer name of ClassAnalyzer.DEFAULT_IMPLEMENTATION_NAME
will be usedsetDefaultClassAnalyzerName in interface ServiceLocatordefaultClassAnalyzer - The possibly null name of the default class
analyzer (the class analyzer that will be used if a descriptor has not
explicitly set the name of its class analyzer)public Unqualified getDefaultUnqualified()
ServiceLocatorUnqualified annotation that will be
put on all injection points that do not have any qualifiers. This
Unqualified will not be returned by the Injectee.getUnqualified()
method as it is considered to be the systems default Unqualified
annotation. If an injection point has its own Unqualified
annotation returned from Injectee.getUnqualified() then that
one takes precedence over this one. Further any injection point that
is a javax.inject.IterableProvider will not have the default
unqualified applied to itgetDefaultUnqualified in interface ServiceLocatorUnqualified annotation that will be (virtually) put
on injection points that have no qualifiers and no other Unqualified
annotation. If null then this ServiceLocator has no default Unqualified
annotation to be appliedpublic void setDefaultUnqualified(Unqualified unqualified)
ServiceLocatorUnqualified annotation that will be
put on all injection points that do not have any qualifiers. This
Unqualified will not be returned by the Injectee.getUnqualified()
method as it is considered to be the systems default Unqualified
annotation. If an injection point has its own Unqualified
annotation returned from Injectee.getUnqualified() then that
one takes precedence over this one. Further any injection point that
is a javax.inject.IterableProvider will not have the default
unqualified applied to it
This method may be called at any time, but will only affect lookups and injections that have not yet occurred
setDefaultUnqualified in interface ServiceLocatorunqualified - The Unqualified annotation that will be (virtually) put
on injection points that have no qualifiers and no other Unqualified
annotation. If null then this ServiceLocator has no default Unqualified
annotation to be appliedorg.glassfish.hk2.utilities.UnqualifiedImpl}public ServiceLocator getParent()
ServiceLocatorgetParent in interface ServiceLocatorpublic boolean getNeutralContextClassLoader()
ServiceLocatorWhen set to false this value is used to increase performance since getting and setting the context class loader can be expensive. However, if the user code being called by hk2 may change the context class loader of the thread, this value should be true to ensure that tricky and hard to find bugs don't arise when this thread is used for other purposes later on
All new ServiceLocator implementation have this value initially set to true
getNeutralContextClassLoader in interface ServiceLocatorpublic void setNeutralContextClassLoader(boolean neutralContextClassLoader)
ServiceLocatorWhen set to false this value is used to increase performance since getting and setting the context class loader can be expensive. However, if the user code being called by hk2 may change the context class loader of the thread, this value should be true to ensure that tricky and hard to find bugs don't arise when this thread is used for other purposes later on
All new ServiceLocator implementation have this value initially set to true
setNeutralContextClassLoader in interface ServiceLocatorneutralContextClassLoader - true if hk2 should ensure context class
loader neutrality, false if hk2 should not change the context class loader
on the thread around user code callsCopyright © 2009–2017 Oracle Corporation. All rights reserved.