public class DefaultContextCache extends java.lang.Object implements ContextCache
ContextCache
API.
Uses ConcurrentHashMaps
to cache
ApplicationContext
and MergedContextConfiguration
instances.
Modifier and Type | Field and Description |
---|---|
private java.util.Map<MergedContextConfiguration,ApplicationContext> |
contextMap
Map of context keys to Spring
ApplicationContext instances. |
private java.util.Map<MergedContextConfiguration,java.util.Set<MergedContextConfiguration>> |
hierarchyMap
Map of parent keys to sets of children keys, representing a top-down tree
of context hierarchies.
|
private java.util.concurrent.atomic.AtomicInteger |
hitCount |
private java.util.concurrent.atomic.AtomicInteger |
missCount |
private static Log |
statsLogger |
CONTEXT_CACHE_LOGGING_CATEGORY
Constructor and Description |
---|
DefaultContextCache() |
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. |
private void |
remove(java.util.List<MergedContextConfiguration> removedContexts,
MergedContextConfiguration key) |
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.
|
java.lang.String |
toString()
Generate a text string containing the implementation type of this
cache and its statistics.
|
private static final Log statsLogger
private final java.util.Map<MergedContextConfiguration,ApplicationContext> contextMap
ApplicationContext
instances.private final java.util.Map<MergedContextConfiguration,java.util.Set<MergedContextConfiguration>> hierarchyMap
private final java.util.concurrent.atomic.AtomicInteger hitCount
private final java.util.concurrent.atomic.AtomicInteger missCount
public boolean contains(MergedContextConfiguration key)
contains
in interface ContextCache
key
- the context key (never null
)true
if the cache contains a context with the given keypublic ApplicationContext get(MergedContextConfiguration key)
ApplicationContext
for the given key.
get
in interface ContextCache
key
- the context key (never null
)ApplicationContext
instance, or null
if not found in the cacheContextCache.remove(org.springframework.test.context.MergedContextConfiguration, org.springframework.test.annotation.DirtiesContext.HierarchyMode)
public void put(MergedContextConfiguration key, ApplicationContext context)
ApplicationContext
instance to the cache
under the given key.put
in interface ContextCache
key
- the context key (never null
)context
- the ApplicationContext
instance (never null
)public void remove(MergedContextConfiguration key, DirtiesContext.HierarchyMode hierarchyMode)
ConfigurableApplicationContext
.
Generally speaking, this method should be called 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.
remove
in interface ContextCache
key
- the context key; never null
hierarchyMode
- the hierarchy mode; may be null
if the context
is not part of a hierarchyprivate void remove(java.util.List<MergedContextConfiguration> removedContexts, MergedContextConfiguration key)
public int size()
If the cache contains more than Integer.MAX_VALUE
elements,
this method must return Integer.MAX_VALUE
.
size
in interface ContextCache
public int getParentContextCount()
getParentContextCount
in interface ContextCache
public int getHitCount()
A hit is any access to the cache that returns a non-null context for the queried key.
getHitCount
in interface ContextCache
public int getMissCount()
A miss is any access to the cache that returns a null
context for the queried key.
getMissCount
in interface ContextCache
public void reset()
reset
in interface ContextCache
ContextCache.clear()
,
ContextCache.clearStatistics()
public void clear()
clear
in interface ContextCache
public void clearStatistics()
clearStatistics
in interface ContextCache
public void logStatistics()
ContextCache
at DEBUG
level
using the "org.springframework.test.context.cache" logging category.
The following information should be logged.
ContextCache
implementationlogStatistics
in interface ContextCache
public java.lang.String toString()
The string returned by this method contains all information
required for compliance with the contract for logStatistics()
.
toString
in class java.lang.Object