Class DefaultCacheAwareContextLoaderDelegate
- All Implemented Interfaces:
CacheAwareContextLoaderDelegate
CacheAwareContextLoaderDelegate
strategy.
To use a static DefaultContextCache
, invoke the
DefaultCacheAwareContextLoaderDelegate()
constructor; otherwise,
invoke the DefaultCacheAwareContextLoaderDelegate(ContextCache)
and provide a custom ContextCache
implementation.
As of Spring Framework 6.0, this class loads ApplicationContextFailureProcessor
implementations via the SpringFactoriesLoader
mechanism and delegates to them in
loadContext(MergedContextConfiguration)
to process context load failures.
As of Spring Framework 6.1, this class supports the failure threshold
feature described in CacheAwareContextLoaderDelegate.loadContext(org.springframework.test.context.MergedContextConfiguration)
,
delegating to ContextCacheUtils.retrieveContextFailureThreshold()
to
obtain the threshold value to use.
- Since:
- 4.1
- Author:
- Sam Brannen
-
Field Summary
Fields inherited from interface org.springframework.test.context.CacheAwareContextLoaderDelegate
CONTEXT_FAILURE_THRESHOLD_PROPERTY_NAME, DEFAULT_CONTEXT_FAILURE_THRESHOLD
-
Constructor Summary
ConstructorDescriptionConstruct a newDefaultCacheAwareContextLoaderDelegate
using a staticDefaultContextCache
.DefaultCacheAwareContextLoaderDelegate
(ContextCache contextCache) Construct a newDefaultCacheAwareContextLoaderDelegate
using the suppliedContextCache
and the default or user-configured context failure threshold. -
Method Summary
Modifier and TypeMethodDescriptionvoid
closeContext
(MergedContextConfiguration mergedConfig, DirtiesContext.HierarchyMode hierarchyMode) Remove the application context for the suppliedMergedContextConfiguration
from theContextCache
and close it if it is an instance ofConfigurableApplicationContext
.protected ContextCache
Get theContextCache
used by this context loader delegate.boolean
isContextLoaded
(MergedContextConfiguration mergedConfig) Determine if the application context for the suppliedMergedContextConfiguration
has been loaded (i.e., is present in theContextCache
).loadContext
(MergedContextConfiguration mergedConfig) Load the application context for the suppliedMergedContextConfiguration
by delegating to theContextLoader
configured in the givenMergedContextConfiguration
.protected ApplicationContext
loadContextInAotMode
(org.springframework.test.context.cache.AotMergedContextConfiguration aotMergedConfig) protected ApplicationContext
loadContextInternal
(MergedContextConfiguration mergedConfig) Load theApplicationContext
for the supplied merged context configuration.
-
Constructor Details
-
DefaultCacheAwareContextLoaderDelegate
public DefaultCacheAwareContextLoaderDelegate()Construct a newDefaultCacheAwareContextLoaderDelegate
using a staticDefaultContextCache
.The default cache is static so that each context can be cached and reused for all subsequent tests that declare the same unique context configuration within the same JVM process.
-
DefaultCacheAwareContextLoaderDelegate
Construct a newDefaultCacheAwareContextLoaderDelegate
using the suppliedContextCache
and the default or user-configured context failure threshold.
-
-
Method Details
-
isContextLoaded
Description copied from interface:CacheAwareContextLoaderDelegate
Determine if the application context for the suppliedMergedContextConfiguration
has been loaded (i.e., is present in theContextCache
).Implementations of this method must not load the application context as a side effect. In addition, implementations of this method should not log the cache statistics via
ContextCache.logStatistics()
.The default implementation of this method always returns
false
. CustomCacheAwareContextLoaderDelegate
implementations are therefore highly encouraged to override this method with a more meaningful implementation. Note that the standardCacheAwareContextLoaderDelegate
implementation in Spring overrides this method appropriately.- Specified by:
isContextLoaded
in interfaceCacheAwareContextLoaderDelegate
- Parameters:
mergedConfig
- the merged context configuration used to load the application context; nevernull
- Returns:
true
if the application context has been loaded- See Also:
-
loadContext
Description copied from interface:CacheAwareContextLoaderDelegate
Load the application context for the suppliedMergedContextConfiguration
by delegating to theContextLoader
configured in the givenMergedContextConfiguration
.If the context is present in the
ContextCache
it will simply be returned; otherwise, it will be loaded, stored in the cache, and returned.As of Spring Framework 6.0, implementations of this method should load
ApplicationContextFailureProcessor
implementations via theSpringFactoriesLoader
mechanism, catch any exception thrown by theContextLoader
, and delegate to each of the configured failure processors to process the context load failure if the exception is an instance ofContextLoadException
.As of Spring Framework 6.1, implementations of this method are encouraged to support the failure threshold feature. Specifically, if repeated attempts are made to load an application context and that application context consistently fails to load — for example, due to a configuration error that prevents the context from successfully loading — this method should preemptively throw an
IllegalStateException
if the configured failure threshold has been exceeded. Note that theContextCache
provides support for tracking and incrementing the failure count for a given context cache key.The cache statistics should be logged by invoking
ContextCache.logStatistics()
.- Specified by:
loadContext
in interfaceCacheAwareContextLoaderDelegate
- Parameters:
mergedConfig
- the merged context configuration to use to load the application context; nevernull
- Returns:
- the application context (never
null
) - See Also:
-
CacheAwareContextLoaderDelegate.isContextLoaded(org.springframework.test.context.MergedContextConfiguration)
CacheAwareContextLoaderDelegate.closeContext(org.springframework.test.context.MergedContextConfiguration, org.springframework.test.annotation.DirtiesContext.HierarchyMode)
CacheAwareContextLoaderDelegate.CONTEXT_FAILURE_THRESHOLD_PROPERTY_NAME
-
closeContext
public void closeContext(MergedContextConfiguration mergedConfig, @Nullable DirtiesContext.HierarchyMode hierarchyMode) Description copied from interface:CacheAwareContextLoaderDelegate
Remove the application context for the suppliedMergedContextConfiguration
from theContextCache
and close it if it is an instance ofConfigurableApplicationContext
.The semantics of the supplied
HierarchyMode
must be honored when removing the context from the cache. See the Javadoc forDirtiesContext.HierarchyMode
for details.Generally speaking, this method should only be called if the state of a singleton bean has been changed (potentially affecting future interaction with the context) or if the context needs to be prematurely removed from the cache.
- Specified by:
closeContext
in interfaceCacheAwareContextLoaderDelegate
- Parameters:
mergedConfig
- the merged context configuration for the application context to close; nevernull
hierarchyMode
- the hierarchy mode; may benull
if the context is not part of a hierarchy- See Also:
-
getContextCache
Get theContextCache
used by this context loader delegate. -
loadContextInternal
protected ApplicationContext loadContextInternal(MergedContextConfiguration mergedConfig) throws Exception Load theApplicationContext
for the supplied merged context configuration.Supports both the
SmartContextLoader
andContextLoader
SPIs.- Throws:
Exception
- if an error occurs while loading the application context
-
loadContextInAotMode
protected ApplicationContext loadContextInAotMode(org.springframework.test.context.cache.AotMergedContextConfiguration aotMergedConfig) throws Exception - Throws:
Exception
-