org.thymeleaf.cache.ICacheManager Maven / Gradle / Ivy
Show all versions of thymeleaf Show documentation
/*
* =============================================================================
*
* Copyright (c) 2011-2018, The THYMELEAF team (http://www.thymeleaf.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* =============================================================================
*/
package org.thymeleaf.cache;
import java.util.List;
import org.thymeleaf.engine.TemplateModel;
/**
*
* Common interface for all cache manager implementations.
*
*
* This class is in charge of providing the corresponding cache objects to
* the template engine. Every call to each of the {@code getXCache()}
* methods must always return the XCache object (i.e. only one cache object
* should be ever created for each type of cache, and returned every time it
* is requested).
*
*
* These caches are predefined:
*
*
* - A template cache, used for storing parsed templates referenced
* by their template name and other resolution info (see {@link TemplateCacheKey}).
* - An expression cache, used for storing expression evaluation artifacts
* (for example, {@link org.thymeleaf.standard.expression.Expression} parsed trees,
* OGNL/Spring EL parsed trees, etc). Given that this cache can usually store objects
* of different classes (referenced by their String representation), prefixes are
* normally applied to the String keys in order to being able to differentiate these
* classes when retrieving cache entries.
*
*
* Only the caches listed above are needed by the template engine when the standard dialects
* are being used, but users might want to define new dialects and use new types of caches,
* which can be provided by the cache manager using the {@link #getSpecificCache(String)}
* method.
*
*
* Any of these methods could return null, in which case the engine will consider that
* no cache must be applied for that specific function.
*
*
* Note a class with this name existed since 2.0.0, but it was completely reimplemented
* in Thymeleaf 3.0
*
*
* @author Daniel Fernández
*
* @since 3.0.0
*
*/
public interface ICacheManager {
/**
*
* Returns the cache of parsed templates. Keys are the template names,
* as specified at the {@link org.thymeleaf.TemplateEngine#process(String, org.thymeleaf.context.IContext)}
* method.
*
*
* @return the cache of parsed templates.
*/
public ICache getTemplateCache();
/**
*
* Returns the cache of expression evaluation artifacts.
*
*
* This cache is meant to store artifacts of diverse nature needed along the
* process of parsing and executing expressions in the several languages
* available: Standard expressions, OGNL expressions, Spring EL expressions...
*
*
* Parsing these expressions usually results in some kind of syntax tree object
* that represents the expression, and this is what this cache usually stores.
*
*
* Keys are the expressions themselves (their String representation), along with
* a type that is normally used for identifying the nature of the object being
* cached (for example {@code {"ognl","person.name"}}).
*
*
* @return the cache of expression artifacts
*/
public ICache getExpressionCache();
/**
*
* Returns a specific (non-default) cache, by its name.
*
*
* User-defined dialects might make use of additional caches (besides template,
* and expression) defined at custom-made implementations of this interface, and
* they should use this method to retrieve them by their name.
*
*
* Note the default {@link StandardCacheManager} will return {@code null} for every
* call to this method, as it should be custom implementations of this interface (or
* extensions of {@link AbstractCacheManager} or extensions {@link StandardCacheManager})
* who implement these specific caches and offer their names through the
* {@link #getAllSpecificCacheNames()} method.
*
*
* @param name the name of the needed cache
* @param the type of the cache keys
* @param the type of the cache values
* @return the required cache
*/
public ICache getSpecificCache(final String name);
/**
*
* Returns a list with the names of all the specific caches
* managed by this implementation.
*
*
* Might return null if no specific caches are managed.
*
*
* Note the default {@link StandardCacheManager} will return {@code null}, as it should
* be custom implementations of this interface (or
* extensions of {@link AbstractCacheManager} or extensions {@link StandardCacheManager})
* who implement these specific caches and offer their names through the
* {@link #getAllSpecificCacheNames()} method.
*
*
* @return a list with all the names of the "specific caches"
* @since 2.0.16
*/
public List getAllSpecificCacheNames();
/**
*
* Clears all the caches managed by this cache manager instance.
*
*
* This method is mainly intended for use from external tools that
* might need to clean all caches completely, without having to worry
* about implementation details.
*
*
* @since 2.0.16
*/
public void clearAllCaches();
}