org.springframework.test.context.cache

Interface ContextCache

  • All Known Implementing Classes:
    DefaultContextCache


    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.

    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 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.

    Since:
    4.2
    Author:
    Sam Brannen, Juergen Hoeller
    See Also:
    ContextCacheUtils.retrieveMaxCacheSize()
    • Field Detail

      • CONTEXT_CACHE_LOGGING_CATEGORY

        static final java.lang.String CONTEXT_CACHE_LOGGING_CATEGORY
        The name of the logging category used for reporting ContextCache statistics.
        See Also:
        Constant Field Values
      • MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME

        static final java.lang.String MAX_CONTEXT_CACHE_SIZE_PROPERTY_NAME
        System property used to configure the maximum size of the 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.

        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 (never null)
        Returns:
        true if the cache contains a context with the given key
      • put

        void put(MergedContextConfiguration key,
                 ApplicationContext context)
        Explicitly add an ApplicationContext instance to the cache under the given key, potentially honoring a custom eviction policy.
        Parameters:
        key - the context key (never null)
        context - the ApplicationContext instance (never null)
      • 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 of 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.

        Parameters:
        key - the context key; never null
        hierarchyMode - the hierarchy mode; may be null if 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_VALUE elements, this method must return Integer.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 null context 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).