abstract class ContextLoaderUtils
extends java.lang.Object
ContextLoaders
and
SmartContextLoaders
and resolving resource locations,
annotated classes, active bean definition profiles, and application context
initializers.ContextLoader
,
SmartContextLoader
,
ContextConfiguration
,
ContextConfigurationAttributes
,
ActiveProfiles
,
ActiveProfilesResolver
,
ApplicationContextInitializer
,
ContextHierarchy
,
MergedContextConfiguration
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
DEFAULT_CONTEXT_LOADER_CLASS_NAME |
private static java.lang.String |
DEFAULT_WEB_CONTEXT_LOADER_CLASS_NAME |
(package private) static java.lang.String |
GENERATED_CONTEXT_HIERARCHY_LEVEL_PREFIX |
private static Log |
logger |
private static java.lang.String |
WEB_APP_CONFIGURATION_CLASS_NAME |
private static java.lang.String |
WEB_MERGED_CONTEXT_CONFIGURATION_CLASS_NAME |
Modifier | Constructor and Description |
---|---|
private |
ContextLoaderUtils() |
Modifier and Type | Method and Description |
---|---|
(package private) static java.util.Map<java.lang.String,java.util.List<ContextConfigurationAttributes>> |
buildContextHierarchyMap(java.lang.Class<?> testClass)
Build a context hierarchy map for the supplied test class and its superclasses, taking into account context hierarchies
declared via
@ContextHierarchy and
@ContextConfiguration . |
private static MergedContextConfiguration |
buildMergedContextConfiguration(java.lang.Class<?> testClass,
java.util.List<ContextConfigurationAttributes> configAttributesList,
java.lang.String defaultContextLoaderClassName,
MergedContextConfiguration parentConfig,
CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate)
Build the
merged context configuration for the
supplied testClass , context configuration attributes,
defaultContextLoaderClassName , and parent context configuration. |
(package private) static MergedContextConfiguration |
buildMergedContextConfiguration(java.lang.Class<?> testClass,
java.lang.String defaultContextLoaderClassName,
CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate)
Build the
merged context configuration for
the supplied testClass and defaultContextLoaderClassName ,
taking into account context hierarchies declared via
@ContextHierarchy and
@ContextConfiguration . |
private static MergedContextConfiguration |
buildWebMergedContextConfiguration(java.lang.Class<?> testClass,
java.lang.String[] locations,
java.lang.Class<?>[] classes,
java.util.Set<java.lang.Class<? extends ApplicationContextInitializer<? extends ConfigurableApplicationContext>>> initializerClasses,
java.lang.String[] activeProfiles,
ContextLoader contextLoader,
CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate,
MergedContextConfiguration parentConfig)
Attempt to build a
WebMergedContextConfiguration
from the supplied arguments, using reflection in order to avoid package cycles. |
private static void |
convertAnnotationAttributesToConfigAttributesAndAddToList(AnnotationAttributes annAttrs,
java.lang.Class<?> declaringClass,
java.util.List<ContextConfigurationAttributes> attributesList)
Convenience method for creating a
ContextConfigurationAttributes
instance from the supplied AnnotationAttributes and declaring
class and then adding the attributes to the supplied list. |
private static void |
convertContextConfigToConfigAttributesAndAddToList(ContextConfiguration contextConfiguration,
java.lang.Class<?> declaringClass,
java.util.List<ContextConfigurationAttributes> attributesList)
Convenience method for creating a
ContextConfigurationAttributes
instance from the supplied ContextConfiguration annotation and
declaring class and then adding the attributes to the supplied list. |
private static java.lang.Class<? extends java.lang.annotation.Annotation> |
loadWebAppConfigurationClass()
Load the
WebAppConfiguration
class, using reflection in order to avoid package cycles. |
(package private) static java.lang.String[] |
resolveActiveProfiles(java.lang.Class<?> testClass)
Resolve active bean definition profiles for the supplied
Class . |
(package private) static java.util.List<ContextConfigurationAttributes> |
resolveContextConfigurationAttributes(java.lang.Class<?> testClass)
Resolve the list of context
configuration attributes for the supplied test class and its
superclasses.
|
(package private) static java.util.List<java.util.List<ContextConfigurationAttributes>> |
resolveContextHierarchyAttributes(java.lang.Class<?> testClass)
Resolve the list of lists of context
configuration attributes for the supplied test class and its
superclasses, taking into account context hierarchies declared via
@ContextHierarchy and
@ContextConfiguration . |
(package private) static ContextLoader |
resolveContextLoader(java.lang.Class<?> testClass,
java.util.List<ContextConfigurationAttributes> configAttributesList,
java.lang.String defaultContextLoaderClassName)
Resolve the
ContextLoader class to use for the supplied
list of ContextConfigurationAttributes and then instantiate and return that
ContextLoader . |
(package private) static java.lang.Class<? extends ContextLoader> |
resolveContextLoaderClass(java.lang.Class<?> testClass,
java.util.List<ContextConfigurationAttributes> configAttributesList,
java.lang.String defaultContextLoaderClassName)
Resolve the
ContextLoader class to use for the supplied
list of ContextConfigurationAttributes . |
(package private) static java.util.Set<java.lang.Class<? extends ApplicationContextInitializer<? extends ConfigurableApplicationContext>>> |
resolveInitializerClasses(java.util.List<ContextConfigurationAttributes> configAttributesList)
Resolve the list of merged
ApplicationContextInitializer classes for the
supplied list of ContextConfigurationAttributes . |
private static void |
validateActiveProfilesConfiguration(java.lang.Class<?> declaringClass,
AnnotationAttributes annAttrs) |
static final java.lang.String GENERATED_CONTEXT_HIERARCHY_LEVEL_PREFIX
private static final Log logger
private static final java.lang.String DEFAULT_CONTEXT_LOADER_CLASS_NAME
private static final java.lang.String DEFAULT_WEB_CONTEXT_LOADER_CLASS_NAME
private static final java.lang.String WEB_APP_CONFIGURATION_CLASS_NAME
private static final java.lang.String WEB_MERGED_CONTEXT_CONFIGURATION_CLASS_NAME
static ContextLoader resolveContextLoader(java.lang.Class<?> testClass, java.util.List<ContextConfigurationAttributes> configAttributesList, java.lang.String defaultContextLoaderClassName)
ContextLoader
class to use for the supplied
list of ContextConfigurationAttributes
and then instantiate and return that
ContextLoader
.
If the supplied defaultContextLoaderClassName
is null
or
empty, depending on the absence or presence of
@WebAppConfiguration
either
"org.springframework.test.context.support.DelegatingSmartContextLoader"
or
"org.springframework.test.context.web.WebDelegatingSmartContextLoader"
will
be used as the default context loader class name. For details on the class
resolution process, see resolveContextLoaderClass(java.lang.Class<?>, java.util.List<org.springframework.test.context.ContextConfigurationAttributes>, java.lang.String)
.
testClass
- the test class for which the ContextLoader
should be
resolved; must not be null
configAttributesList
- the list of configuration attributes to process; must
not be null
or empty; must be ordered bottom-up
(i.e., as if we were traversing up the class hierarchy)defaultContextLoaderClassName
- the name of the default ContextLoader
class to use; may be null
or emptyContextLoader
for the supplied testClass
(never null
)resolveContextLoaderClass(java.lang.Class<?>, java.util.List<org.springframework.test.context.ContextConfigurationAttributes>, java.lang.String)
static java.lang.Class<? extends ContextLoader> resolveContextLoaderClass(java.lang.Class<?> testClass, java.util.List<ContextConfigurationAttributes> configAttributesList, java.lang.String defaultContextLoaderClassName)
ContextLoader
class to use for the supplied
list of ContextConfigurationAttributes
.
Beginning with the first level in the context configuration attributes hierarchy:
contextLoaderClass
property of ContextConfigurationAttributes
is
configured with an explicit class, that class will be returned.ContextLoader
class is not specified at the current
level in the hierarchy, traverse to the next level in the hierarchy and return to
step #1.ContextLoader
class is found after traversing the
hierarchy, an attempt will be made to load and return the class with the supplied
defaultContextLoaderClassName
.testClass
- the class for which to resolve the ContextLoader
class;
must not be null
; only used for logging purposesconfigAttributesList
- the list of configuration attributes to process; must
not be null
or empty; must be ordered bottom-up
(i.e., as if we were traversing up the class hierarchy)defaultContextLoaderClassName
- the name of the default ContextLoader
class to use; must not be null
or emptyContextLoader
class to use for the supplied test classjava.lang.IllegalArgumentException
- if @ContextConfiguration
is not
present on the supplied test classjava.lang.IllegalStateException
- if the default ContextLoader
class could not
be loadedprivate static void convertContextConfigToConfigAttributesAndAddToList(ContextConfiguration contextConfiguration, java.lang.Class<?> declaringClass, java.util.List<ContextConfigurationAttributes> attributesList)
ContextConfigurationAttributes
instance from the supplied ContextConfiguration
annotation and
declaring class and then adding the attributes to the supplied list.private static void convertAnnotationAttributesToConfigAttributesAndAddToList(AnnotationAttributes annAttrs, java.lang.Class<?> declaringClass, java.util.List<ContextConfigurationAttributes> attributesList)
ContextConfigurationAttributes
instance from the supplied AnnotationAttributes
and declaring
class and then adding the attributes to the supplied list.static java.util.List<java.util.List<ContextConfigurationAttributes>> resolveContextHierarchyAttributes(java.lang.Class<?> testClass)
@ContextHierarchy
and
@ContextConfiguration
.
The outer list represents a top-down ordering of context configuration
attributes, where each element in the list represents the context configuration
declared on a given test class in the class hierarchy. Each nested list
contains the context configuration attributes declared either via a single
instance of @ContextConfiguration
on the particular class or via
multiple instances of @ContextConfiguration
declared within a
single @ContextHierarchy
instance on the particular class.
Furthermore, each nested list maintains the order in which
@ContextConfiguration
instances are declared.
Note that the inheritLocations
and
inheritInitializers
flags of
@ContextConfiguration
will not
be taken into consideration. If these flags need to be honored, that must be
handled manually when traversing the nested lists returned by this method.
testClass
- the class for which to resolve the context hierarchy attributes
(must not be null
)null
java.lang.IllegalArgumentException
- if the supplied class is null
; if
neither @ContextConfiguration
nor @ContextHierarchy
is
present on the supplied class; or if a test class or composed annotation
in the class hierarchy declares both @ContextConfiguration
and
@ContextHierarchy
as top-level annotations.java.lang.IllegalStateException
- if no class in the class hierarchy declares
@ContextHierarchy
.buildContextHierarchyMap(Class)
,
resolveContextConfigurationAttributes(Class)
static java.util.Map<java.lang.String,java.util.List<ContextConfigurationAttributes>> buildContextHierarchyMap(java.lang.Class<?> testClass)
@ContextHierarchy
and
@ContextConfiguration
.
Each value in the map represents the consolidated list of context configuration attributes for a
given level in the context hierarchy (potentially across the test class
hierarchy), keyed by the name
of the
context hierarchy level.
If a given level in the context hierarchy does not have an explicit
name (i.e., configured via ContextConfiguration.name()
), a name will
be generated for that hierarchy level by appending the numerical level to
the GENERATED_CONTEXT_HIERARCHY_LEVEL_PREFIX
.
testClass
- the class for which to resolve the context hierarchy map
(must not be null
)null
java.lang.IllegalArgumentException
- if the lists of context configuration
attributes for each level in the @ContextHierarchy
do not define
unique context configuration within the overall hierarchy.resolveContextHierarchyAttributes(Class)
static java.util.List<ContextConfigurationAttributes> resolveContextConfigurationAttributes(java.lang.Class<?> testClass)
Note that the inheritLocations
and
inheritInitializers
flags of
@ContextConfiguration
will not
be taken into consideration. If these flags need to be honored, that must be
handled manually when traversing the list returned by this method.
testClass
- the class for which to resolve the configuration attributes (must
not be null
)null
java.lang.IllegalArgumentException
- if the supplied class is null
or if
@ContextConfiguration
is not present on the supplied classstatic java.util.Set<java.lang.Class<? extends ApplicationContextInitializer<? extends ConfigurableApplicationContext>>> resolveInitializerClasses(java.util.List<ContextConfigurationAttributes> configAttributesList)
ApplicationContextInitializer
classes for the
supplied list of ContextConfigurationAttributes
.
Note that the inheritInitializers
flag of @ContextConfiguration
will be taken into
consideration. Specifically, if the inheritInitializers
flag is set to
true
for a given level in the class hierarchy represented by the provided
configuration attributes, context initializer classes defined at the given level
will be merged with those defined in higher levels of the class hierarchy.
configAttributesList
- the list of configuration attributes to process; must
not be null
or empty; must be ordered bottom-up
(i.e., as if we were traversing up the class hierarchy)null
)static java.lang.String[] resolveActiveProfiles(java.lang.Class<?> testClass)
Class
.
Note that the inheritProfiles
flag of
@ActiveProfiles
will be taken into consideration.
Specifically, if the inheritProfiles
flag is set to true
, profiles
defined in the test class will be merged with those defined in superclasses.
testClass
- the class for which to resolve the active profiles (must not be
null
)null
)ActiveProfiles
,
Profile
private static void validateActiveProfilesConfiguration(java.lang.Class<?> declaringClass, AnnotationAttributes annAttrs)
static MergedContextConfiguration buildMergedContextConfiguration(java.lang.Class<?> testClass, java.lang.String defaultContextLoaderClassName, CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate)
merged context configuration
for
the supplied testClass
and defaultContextLoaderClassName
,
taking into account context hierarchies declared via
@ContextHierarchy
and
@ContextConfiguration
.testClass
- the test class for which the MergedContextConfiguration
should be built (must not be null
)defaultContextLoaderClassName
- the name of the default ContextLoader
class to use (may be null
)cacheAwareContextLoaderDelegate
- the cache-aware context loader delegate to
be passed to the MergedContextConfiguration
constructorbuildContextHierarchyMap(Class)
,
buildMergedContextConfiguration(Class, List, String, MergedContextConfiguration, CacheAwareContextLoaderDelegate)
private static MergedContextConfiguration buildMergedContextConfiguration(java.lang.Class<?> testClass, java.util.List<ContextConfigurationAttributes> configAttributesList, java.lang.String defaultContextLoaderClassName, MergedContextConfiguration parentConfig, CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate)
merged context configuration
for the
supplied testClass
, context configuration attributes,
defaultContextLoaderClassName
, and parent context configuration.testClass
- the test class for which the MergedContextConfiguration
should be built (must not be null
)configAttributesList
- the list of context configuration attributes for the
specified test class, ordered bottom-up (i.e., as if we were
traversing up the class hierarchy); never null
or emptydefaultContextLoaderClassName
- the name of the default ContextLoader
class to use (may be null
)parentConfig
- the merged context configuration for the parent application
context in a context hierarchy, or null
if there is no parentcacheAwareContextLoaderDelegate
- the cache-aware context loader delegate to
be passed to the MergedContextConfiguration
constructorresolveContextLoader(java.lang.Class<?>, java.util.List<org.springframework.test.context.ContextConfigurationAttributes>, java.lang.String)
,
resolveContextConfigurationAttributes(java.lang.Class<?>)
,
SmartContextLoader.processContextConfiguration(org.springframework.test.context.ContextConfigurationAttributes)
,
ContextLoader.processLocations(java.lang.Class<?>, java.lang.String...)
,
resolveActiveProfiles(java.lang.Class<?>)
,
MergedContextConfiguration
private static java.lang.Class<? extends java.lang.annotation.Annotation> loadWebAppConfigurationClass()
WebAppConfiguration
class, using reflection in order to avoid package cycles.@WebAppConfiguration
class or null
if it cannot be loadedprivate static MergedContextConfiguration buildWebMergedContextConfiguration(java.lang.Class<?> testClass, java.lang.String[] locations, java.lang.Class<?>[] classes, java.util.Set<java.lang.Class<? extends ApplicationContextInitializer<? extends ConfigurableApplicationContext>>> initializerClasses, java.lang.String[] activeProfiles, ContextLoader contextLoader, CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate, MergedContextConfiguration parentConfig)
WebMergedContextConfiguration
from the supplied arguments, using reflection in order to avoid package cycles.WebMergedContextConfiguration
or null
if it could not be built