public interface ContextCache
ContextCache
defines the SPI for caching Spring
ApplicationContexts
within the
Spring TestContext Framework.
A ContextCache
maintains a cache of ApplicationContexts
keyed by MergedContextConfiguration
instances, potentially configured
with a maximum size and
a custom eviction policy.
Context caching can have significant performance benefits if context
initialization is complex. Although the initialization of a Spring context
itself is typically very quick, some beans in a context — for example,
an embedded database or a LocalContainerEntityManagerFactoryBean
for
working with JPA — may take several seconds to initialize. Hence it
often makes sense to perform that initialization only once per test suite or
JVM process.
ContextCacheUtils.retrieveMaxCacheSize()
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CONTEXT_CACHE_LOGGING_CATEGORY
The name of the logging category used for reporting
ContextCache
statistics. |
static int |
DEFAULT_MAX_CONTEXT_CACHE_SIZE
The default maximum size of the context cache: 32.
|
static java.lang.String |
MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
System property used to configure the maximum size of the
ContextCache
as a positive integer. |
Modifier and Type | Method and Description |
---|---|
void |
clear()
Clear all contexts from the cache, clearing context hierarchy information as well.
|
void |
clearStatistics()
Clear hit and miss count statistics for the cache (i.e., reset counters to zero).
|
boolean |
contains(MergedContextConfiguration key)
Determine whether there is a cached context for the given key.
|
ApplicationContext |
get(MergedContextConfiguration key)
Obtain a cached
ApplicationContext for the given key. |
int |
getHitCount()
Get the overall hit count for this cache.
|
int |
getMissCount()
Get the overall miss count for this cache.
|
int |
getParentContextCount()
Determine the number of parent contexts currently tracked within the cache.
|
void |
logStatistics()
Log the statistics for this
ContextCache at DEBUG level
using the "org.springframework.test.context.cache" logging category. |
void |
put(MergedContextConfiguration key,
ApplicationContext context)
Explicitly add an
ApplicationContext instance to the cache
under the given key, potentially honoring a custom eviction policy. |
void |
remove(MergedContextConfiguration key,
DirtiesContext.HierarchyMode hierarchyMode)
Remove the context with the given key from the cache and explicitly
close
it if it is an instance of
ConfigurableApplicationContext . |
void |
reset()
Reset all state maintained by this cache including statistics.
|
int |
size()
Determine the number of contexts currently stored in the cache.
|
static final java.lang.String CONTEXT_CACHE_LOGGING_CATEGORY
ContextCache
statistics.static final int DEFAULT_MAX_CONTEXT_CACHE_SIZE
MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
,
Constant Field Valuesstatic final java.lang.String MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
ContextCache
as a positive integer. May alternatively be configured via the
SpringProperties
mechanism.
Note that implementations of ContextCache
are not required to
actually support a maximum cache size. Consult the documentation of the
corresponding implementation for details.
DEFAULT_MAX_CONTEXT_CACHE_SIZE
,
Constant Field Valuesboolean contains(MergedContextConfiguration key)
key
- the context key (never null
)true
if the cache contains a context with the given key@Nullable ApplicationContext get(MergedContextConfiguration key)
ApplicationContext
for the given key.
key
- the context key (never null
)ApplicationContext
instance, or null
if not found in the cacheremove(org.springframework.test.context.MergedContextConfiguration, org.springframework.test.annotation.DirtiesContext.HierarchyMode)
void put(MergedContextConfiguration key, ApplicationContext context)
ApplicationContext
instance to the cache
under the given key, potentially honoring a custom eviction policy.key
- the context key (never null
)context
- the ApplicationContext
instance (never null
)void remove(MergedContextConfiguration key, @Nullable DirtiesContext.HierarchyMode hierarchyMode)
ConfigurableApplicationContext
.
Generally speaking, this method should be called to properly evict a context from the cache (e.g., due to a custom eviction policy) or if the state of a singleton bean has been modified, potentially affecting future interaction with the context.
In addition, the semantics of the supplied HierarchyMode
must
be honored. See the Javadoc for DirtiesContext.HierarchyMode
for details.
key
- the context key; never null
hierarchyMode
- the hierarchy mode; may be null
if the context
is not part of a hierarchyint size()
If the cache contains more than Integer.MAX_VALUE
elements,
this method must return Integer.MAX_VALUE
.
int getParentContextCount()
int getHitCount()
A hit is any access to the cache that returns a non-null context for the queried key.
int getMissCount()
A miss is any access to the cache that returns a null
context for the queried key.
void reset()
clear()
,
clearStatistics()
void clear()
void clearStatistics()
void logStatistics()
ContextCache
at DEBUG
level
using the "org.springframework.test.context.cache" logging category.
The following information should be logged.
ContextCache
implementation