@Contract public interface ClassAnalyzer
HK2 will provide a default implementation of this service (with the name "default"). However, individual descriptors may choose a different class analyzer should they so choose. All user supplied implementations of this service must have a name. Implementations of this service must not be ClassAnalyzers for themselves.
The method ServiceLocator.setDefaultClassAnalyzerName(String)
can be used
to set the global ClassAnalyzer name that will be the name of the ClassAnalyzer used
when the method Descriptor.getClassAnalysisName()
returns null
Implementations of ClassAnalyzer will be instantiated as soon as
they are added to HK2 in order to avoid deadlocks and circular references.
Therefore it is recommended that implementations of ClassAnalyzer
make liberal use of Provider
or IterableProvider
when injecting dependent services so that these services are not instantiated
when the ClassAnalyzer is created
Modifier and Type | Field and Description |
---|---|
static String |
DEFAULT_IMPLEMENTATION_NAME
The name of the default ClassAnalyzer service
|
Modifier and Type | Method and Description |
---|---|
<T> Constructor<T> |
getConstructor(Class<T> clazz)
Will return the constructor that it to be used when constructing this
service
|
<T> Set<Field> |
getFields(Class<T> clazz)
Will return the set of initializer fields to be used when initializing
this service
|
<T> Set<Method> |
getInitializerMethods(Class<T> clazz)
Will return the set of initializer method to be used when initializing
this service
|
<T> Method |
getPostConstructMethod(Class<T> clazz)
Will return the postConstruct method of the class
|
<T> Method |
getPreDestroyMethod(Class<T> clazz)
Will return the preDestroy method of the class
|
static final String DEFAULT_IMPLEMENTATION_NAME
<T> Constructor<T> getConstructor(Class<T> clazz) throws MultiException, NoSuchMethodException
The default implementation will use the zero-arg constructor if no single
constructor with Inject is found. Also will return any constructor
that is covered by an InjectionResolver
and the
InjectionResolver.isConstructorParameterIndicator()
is
set to true
clazz
- the non-null class to analyzeMultiException
- on an error when analyzing the classNoSuchMethodException
- if there was no available constructor<T> Set<Method> getInitializerMethods(Class<T> clazz) throws MultiException
The default implementation will return all methods marked with Inject
or that have a parameter that is covered by an InjectionResolver
and the InjectionResolver.isMethodParameterIndicator()
is set
to true. Also, any method that has a parameter marked with
SubcribeTo
will NOT be returned, as these methods are instead
meant to be called when an event is fired
clazz
- the non-null class to analyzeMultiException
- on an error when analyzing the class<T> Set<Field> getFields(Class<T> clazz) throws MultiException
The default implementation will return all fields marked with Inject
or that have a parameter that is covered by an InjectionResolver
clazz
- the non-null class to analyzeMultiException
- on an error when analyzing the class<T> Method getPostConstructMethod(Class<T> clazz) throws MultiException
The default implementation will return the PostConstruct.postConstruct()
method or the method annotated with PostConstruct
clazz
- the non-null class to analyzeMultiException
- on an error when analyzing the class<T> Method getPreDestroyMethod(Class<T> clazz) throws MultiException
The default implementation will return the PreDestroy.preDestroy()
method or the method annotated with PreDestroy
clazz
- the non-null class to analyzeMultiException
- on an error when analyzing the classCopyright © 2009-2017, Oracle and/or its affiliates. All Rights Reserved.