Interface ContextCache
- All Known Implementing Classes:
DefaultContextCache
public interface ContextCache
ContextCachedefines the SPI for caching SpringApplicationContextswithin the Spring TestContext Framework.A
ContextCachemaintains a cache ofApplicationContextskeyed byMergedContextConfigurationinstances, potentially configured with a maximum size and a custom eviction policy.Rationale
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
LocalContainerEntityManagerFactoryBeanfor 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.- Since:
- 4.2
- Author:
- Sam Brannen, Juergen Hoeller
- See Also:
ContextCacheUtils.retrieveMaxCacheSize()
Field Summary
Fields Modifier and Type Field Description static StringCONTEXT_CACHE_LOGGING_CATEGORYThe name of the logging category used for reportingContextCachestatistics.static intDEFAULT_MAX_CONTEXT_CACHE_SIZEThe default maximum size of the context cache: 32.static StringMAX_CONTEXT_CACHE_SIZE_PROPERTY_NAMESystem property used to configure the maximum size of theContextCacheas a positive integer.
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidclear()Clear all contexts from the cache, clearing context hierarchy information as well.voidclearStatistics()Clear hit and miss count statistics for the cache (i.e., reset counters to zero).booleancontains(MergedContextConfiguration key)Determine whether there is a cached context for the given key.ApplicationContextget(MergedContextConfiguration key)Obtain a cachedApplicationContextfor the given key.intgetHitCount()Get the overall hit count for this cache.intgetMissCount()Get the overall miss count for this cache.intgetParentContextCount()Determine the number of parent contexts currently tracked within the cache.voidlogStatistics()Log the statistics for thisContextCacheatDEBUGlevel using the "org.springframework.test.context.cache" logging category.voidput(MergedContextConfiguration key, ApplicationContext context)Explicitly add anApplicationContextinstance to the cache under the given key, potentially honoring a custom eviction policy.voidremove(MergedContextConfiguration key, DirtiesContext.HierarchyMode hierarchyMode)Remove the context with the given key from the cache and explicitly close it if it is an instance ofConfigurableApplicationContext.voidreset()Reset all state maintained by this cache including statistics.intsize()Determine the number of contexts currently stored in the cache.
Field Detail
CONTEXT_CACHE_LOGGING_CATEGORY
static final String CONTEXT_CACHE_LOGGING_CATEGORY
The name of the logging category used for reportingContextCachestatistics.- See Also:
- Constant Field Values
DEFAULT_MAX_CONTEXT_CACHE_SIZE
static final int DEFAULT_MAX_CONTEXT_CACHE_SIZE
The default maximum size of the context cache: 32.- Since:
- 4.3
- See Also:
MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME, Constant Field Values
MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
static final String MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
System property used to configure the maximum size of theContextCacheas a positive integer. May alternatively be configured via theSpringPropertiesmechanism.Note that implementations of
ContextCacheare not required to actually support a maximum cache size. Consult the documentation of the corresponding implementation for details.- Since:
- 4.3
- See Also:
DEFAULT_MAX_CONTEXT_CACHE_SIZE, Constant Field Values
Method Detail
contains
boolean contains(MergedContextConfiguration key)
Determine whether there is a cached context for the given key.- Parameters:
key- the context key (nevernull)- Returns:
trueif the cache contains a context with the given key
get
@Nullable ApplicationContext get(MergedContextConfiguration key)
Obtain a cachedApplicationContextfor the given key.- Parameters:
key- the context key (nevernull)- Returns:
- the corresponding
ApplicationContextinstance, ornullif not found in the cache - See Also:
remove(org.springframework.test.context.MergedContextConfiguration, org.springframework.test.annotation.DirtiesContext.HierarchyMode)
put
void put(MergedContextConfiguration key, ApplicationContext context)
Explicitly add anApplicationContextinstance to the cache under the given key, potentially honoring a custom eviction policy.- Parameters:
key- the context key (nevernull)context- theApplicationContextinstance (nevernull)
remove
void remove(MergedContextConfiguration key, @Nullable DirtiesContext.HierarchyMode hierarchyMode)
Remove the context with the given key from the cache and explicitly close it if it is an instance ofConfigurableApplicationContext.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
HierarchyModemust be honored. See the Javadoc forDirtiesContext.HierarchyModefor details.- Parameters:
key- the context key; nevernullhierarchyMode- the hierarchy mode; may benullif the context is not part of a hierarchy
size
int size()
Determine the number of contexts currently stored in the cache.If the cache contains more than
Integer.MAX_VALUEelements, this method must returnInteger.MAX_VALUE.
getParentContextCount
int getParentContextCount()
Determine the number of parent contexts currently tracked within the cache.
getHitCount
int getHitCount()
Get the overall hit count for this cache.A hit is any access to the cache that returns a non-null context for the queried key.
getMissCount
int getMissCount()
Get the overall miss count for this cache.A miss is any access to the cache that returns a
nullcontext for the queried key.
reset
void reset()
Reset all state maintained by this cache including statistics.- See Also:
clear(),clearStatistics()
clear
void clear()
Clear all contexts from the cache, clearing context hierarchy information as well.
clearStatistics
void clearStatistics()
Clear hit and miss count statistics for the cache (i.e., reset counters to zero).
logStatistics
void logStatistics()
Log the statistics for thisContextCacheatDEBUGlevel using the "org.springframework.test.context.cache" logging category.The following information should be logged.
- name of the concrete
ContextCacheimplementation - size()
- parent context count
- hit count
- miss count
- any other information useful for monitoring the state of this cache
- name of the concrete