public class EhCacheFactoryBean extends net.sf.ehcache.config.CacheConfiguration implements FactoryBean<net.sf.ehcache.Ehcache>, BeanNameAware, InitializingBean
FactoryBean
that creates a named EhCache Cache
instance
(or a decorator that implements the Ehcache
interface),
representing a cache region within an EhCache CacheManager
.
If the specified named cache is not configured in the cache configuration descriptor, this FactoryBean will construct an instance of a Cache with the provided name and the specified cache properties and add it to the CacheManager for later retrieval. If some or all properties are not set at configuration time, this FactoryBean will use defaults.
Note: If the named Cache instance is found, the properties will be ignored and the Cache instance will be retrieved from the CacheManager.
Note: As of Spring 5.0, Spring's EhCache support requires EhCache 2.10 or higher.
setCacheManager(net.sf.ehcache.CacheManager)
,
EhCacheManagerFactoryBean
,
Cache
net.sf.ehcache.config.CacheConfiguration.BootstrapCacheLoaderFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.CacheDecoratorFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.CacheEventListenerFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.CacheExceptionHandlerFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.CacheExtensionFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.CacheLoaderFactoryConfiguration, net.sf.ehcache.config.CacheConfiguration.TransactionalMode
Modifier and Type | Field and Description |
---|---|
protected Log |
logger |
bootstrapCacheLoaderFactoryConfiguration, cacheDecoratorConfigurations, cacheEventListenerConfigurations, cacheExceptionHandlerFactoryConfiguration, cacheExtensionConfigurations, cacheLoaderConfigurations, cacheLoaderTimeoutMillis, cacheWriterConfiguration, clearOnFlush, DEFAULT_CACHE_WRITER_CONFIGURATION, DEFAULT_CLEAR_ON_FLUSH, DEFAULT_COPY_ON_READ, DEFAULT_COPY_ON_WRITE, DEFAULT_COPY_STRATEGY_CONFIGURATION, DEFAULT_DISK_ACCESS_STRIPES, DEFAULT_DISK_PERSISTENT, DEFAULT_ETERNAL_VALUE, DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS, DEFAULT_LOGGING, DEFAULT_MAX_BYTES_OFF_HEAP, DEFAULT_MAX_BYTES_ON_DISK, DEFAULT_MAX_BYTES_ON_HEAP, DEFAULT_MAX_ELEMENTS_ON_DISK, DEFAULT_MAX_ENTRIES_IN_CACHE, DEFAULT_MEMORY_STORE_EVICTION_POLICY, DEFAULT_SPOOL_BUFFER_SIZE, DEFAULT_STATISTICS, DEFAULT_TRANSACTIONAL_MODE, DEFAULT_TTI, DEFAULT_TTL, diskAccessStripes, diskExpiryThreadIntervalSeconds, diskPersistent, diskSpoolBufferSizeMB, eternal, listeners, logging, maxElementsOnDisk, maxEntriesInCache, maxEntriesLocalHeap, memoryStoreEvictionPolicy, name, overflowToDisk, overflowToOffHeap, pinningConfiguration, terracottaConfiguration, timeToIdleSeconds, timeToLiveSeconds
OBJECT_TYPE_ATTRIBUTE
Constructor and Description |
---|
EhCacheFactoryBean() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware , ApplicationContextAware etc. |
protected net.sf.ehcache.Cache |
createCache()
Create a raw Cache object based on the configuration of this FactoryBean.
|
protected net.sf.ehcache.Ehcache |
decorateCache(net.sf.ehcache.Ehcache cache)
Decorate the given Cache, if necessary.
|
net.sf.ehcache.Ehcache |
getObject()
Return an instance (possibly shared or independent) of the object
managed by this factory.
|
Class<? extends net.sf.ehcache.Ehcache> |
getObjectType()
Predict the particular
Ehcache implementation that will be returned from
getObject() based on logic in createCache() and
decorateCache(Ehcache) as orchestrated by afterPropertiesSet() . |
boolean |
isSingleton()
Is the object managed by this factory a singleton? That is,
will
FactoryBean.getObject() always return the same object
(a reference that can be cached)? |
void |
setBeanName(String name)
Set the name of the bean in the bean factory that created this bean.
|
void |
setBlocking(boolean blocking)
Set whether to use a blocking cache that lets read attempts block
until the requested element is created.
|
void |
setBootstrapCacheLoader(net.sf.ehcache.bootstrap.BootstrapCacheLoader bootstrapCacheLoader)
Set an EhCache
BootstrapCacheLoader
for this cache, if any. |
void |
setCacheEntryFactory(net.sf.ehcache.constructs.blocking.CacheEntryFactory cacheEntryFactory)
Set an EhCache
CacheEntryFactory
to use for a self-populating cache. |
void |
setCacheEventListeners(Set<net.sf.ehcache.event.CacheEventListener> cacheEventListeners)
Specify EhCache
cache event listeners
to registered with this cache. |
void |
setCacheManager(net.sf.ehcache.CacheManager cacheManager)
Set a CacheManager from which to retrieve a named Cache instance.
|
void |
setCacheName(String cacheName)
Set a name for which to retrieve or create a cache instance.
|
void |
setDisabled(boolean disabled)
Set whether this cache should be marked as disabled.
|
void |
setDiskSpoolBufferSize(int diskSpoolBufferSize)
Set the disk spool buffer size (in MB).
|
void |
setTimeToIdle(int timeToIdle)
Set the time to idle.
|
void |
setTimeToLive(int timeToLive)
Set the time to live.
|
addBootstrapCacheLoaderFactory, addCacheDecoratorFactory, addCacheEventListenerFactory, addCacheExceptionHandlerFactory, addCacheExtensionFactory, addCacheLoaderFactory, addCacheWriter, addConfigurationListener, addCopyStrategy, addDynamicSearchListener, addElementValueComparator, addPersistence, addPinning, addSearchable, addSizeOfPolicy, addTerracotta, bootstrapCacheLoaderFactory, cacheEventListenerFactory, cacheExceptionHandlerFactory, cacheExtensionFactory, cacheLoaderFactory, cacheWriter, clearOnFlush, clone, copyOnRead, copyOnWrite, diskAccessStripes, diskExpiryThreadIntervalSeconds, diskPersistent, diskSpoolBufferSizeMB, dynamicAttributeExtractor, eternal, freezeConfiguration, getBootstrapCacheLoaderFactoryConfiguration, getCacheDecoratorConfigurations, getCacheEventListenerConfigurations, getCacheExceptionHandlerFactoryConfiguration, getCacheExtensionConfigurations, getCacheLoaderConfigurations, getCacheLoaderTimeoutMillis, getCacheWriterConfiguration, getClassLoader, getCopyStrategy, getCopyStrategyConfiguration, getDiskAccessStripes, getDiskExpiryThreadIntervalSeconds, getDiskSpoolBufferSizeMB, getDynamicExtractor, getElementValueComparatorConfiguration, getLogging, getMaxBytesLocalDisk, getMaxBytesLocalDiskAsString, getMaxBytesLocalDiskPercentage, getMaxBytesLocalHeap, getMaxBytesLocalHeapAsString, getMaxBytesLocalHeapPercentage, getMaxBytesLocalOffHeap, getMaxBytesLocalOffHeapAsString, getMaxBytesLocalOffHeapPercentage, getMaxElementsInMemory, getMaxElementsOnDisk, getMaxEntriesInCache, getMaxEntriesLocalDisk, getMaxEntriesLocalHeap, getMaxMemoryOffHeap, getMaxMemoryOffHeapInBytes, getMemoryStoreEvictionPolicy, getName, getPersistenceConfiguration, getPinningConfiguration, getSearchable, getSearchAttributes, getSizeOfPolicyConfiguration, getStatistics, getTerracottaConfiguration, getTerracottaConsistency, getTimeToIdleSeconds, getTimeToLiveSeconds, getTransactionalMode, internalSetDiskCapacity, internalSetEternal, internalSetLogging, internalSetMaxBytesLocalOffheap, internalSetMaxEntriesInCache, internalSetMemCapacity, internalSetMemCapacityInBytes, internalSetOverflowToOffheap, internalSetTimeToIdle, internalSetTimeToLive, isClearOnFlush, isCopyOnRead, isCopyOnWrite, isCountBasedTuned, isDiskPersistent, isEternal, isFrozen, isLocalTransactional, isMaxBytesLocalDiskPercentageSet, isMaxBytesLocalHeapPercentageSet, isMaxBytesLocalOffHeapPercentageSet, isOverflowToDisk, isOverflowToOffHeap, isOverflowToOffHeapSet, isSearchable, isTerracottaClustered, isXaStrictTransactional, isXaTransactional, logging, maxBytesLocalDisk, maxBytesLocalHeap, maxBytesLocalOffHeap, maxElementsInMemory, maxElementsOnDisk, maxEntriesInCache, maxEntriesLocalDisk, maxEntriesLocalHeap, maxMemoryOffHeap, memoryStoreEvictionPolicy, memoryStoreEvictionPolicy, name, overflowToDisk, overflowToOffHeap, persistence, pinning, removeConfigurationListener, searchable, setCacheLoaderTimeoutMillis, setClassLoader, setClearOnFlush, setCopyOnRead, setCopyOnWrite, setDiskAccessStripes, setDiskExpiryThreadIntervalSeconds, setDiskPersistent, setDiskSpoolBufferSizeMB, setDynamicAttributesExtractor, setEternal, setLogging, setMaxBytesLocalDisk, setMaxBytesLocalDisk, setMaxBytesLocalHeap, setMaxBytesLocalHeap, setMaxBytesLocalOffHeap, setMaxBytesLocalOffHeap, setMaxElementsInMemory, setMaxElementsOnDisk, setMaxEntriesInCache, setMaxEntriesLocalDisk, setMaxEntriesLocalHeap, setMaxMemoryOffHeap, setMemoryStoreEvictionPolicy, setMemoryStoreEvictionPolicyFromObject, setName, setOverflowToDisk, setOverflowToOffHeap, setStatistics, setTimeToIdleSeconds, setTimeToLiveSeconds, setTransactionalMode, setupFor, setupFor, sizeOfPolicy, statistics, terracotta, timeoutMillis, timeToIdleSeconds, timeToLiveSeconds, transactionalMode, transactionalMode, validate, validateCompleteConfiguration, validateConfiguration
protected final Log logger
public void setCacheManager(net.sf.ehcache.CacheManager cacheManager)
CacheManager.getInstance()
will be called.
Note that in particular for persistent caches, it is advisable to properly handle the shutdown of the CacheManager: Set up a separate EhCacheManagerFactoryBean and pass a reference to this bean property.
A separate EhCacheManagerFactoryBean is also necessary for loading EhCache configuration from a non-default config location.
EhCacheManagerFactoryBean
,
CacheManager.getInstance()
public void setCacheName(String cacheName)
public void setTimeToLive(int timeToLive)
CacheConfiguration.setTimeToLiveSeconds(long)
public void setTimeToIdle(int timeToIdle)
CacheConfiguration.setTimeToIdleSeconds(long)
public void setDiskSpoolBufferSize(int diskSpoolBufferSize)
CacheConfiguration.setDiskSpoolBufferSizeMB(int)
public void setBlocking(boolean blocking)
If you intend to build a self-populating blocking cache,
consider specifying a CacheEntryFactory
.
BlockingCache
,
setCacheEntryFactory(net.sf.ehcache.constructs.blocking.CacheEntryFactory)
public void setCacheEntryFactory(net.sf.ehcache.constructs.blocking.CacheEntryFactory cacheEntryFactory)
CacheEntryFactory
to use for a self-populating cache. If such a factory is specified,
the cache will be decorated with EhCache's
SelfPopulatingCache
.
The specified factory can be of type
UpdatingCacheEntryFactory
,
which will lead to the use of an
UpdatingSelfPopulatingCache
.
Note: Any such self-populating cache is automatically a blocking cache.
SelfPopulatingCache
,
UpdatingSelfPopulatingCache
,
UpdatingCacheEntryFactory
public void setBootstrapCacheLoader(net.sf.ehcache.bootstrap.BootstrapCacheLoader bootstrapCacheLoader)
BootstrapCacheLoader
for this cache, if any.public void setCacheEventListeners(Set<net.sf.ehcache.event.CacheEventListener> cacheEventListeners)
cache event listeners
to registered with this cache.public void setDisabled(boolean disabled)
Cache.setDisabled(boolean)
public void setBeanName(String name)
BeanNameAware
Invoked after population of normal bean properties but before an
init callback such as InitializingBean.afterPropertiesSet()
or a custom init-method.
setBeanName
in interface BeanNameAware
name
- the name of the bean in the factory.
Note that this name is the actual bean name used in the factory, which may
differ from the originally specified name: in particular for inner bean
names, the actual bean name might have been made unique through appending
"#..." suffixes. Use the BeanFactoryUtils.originalBeanName(String)
method to extract the original bean name (without suffix), if desired.public void afterPropertiesSet() throws net.sf.ehcache.CacheException
InitializingBean
BeanFactory
after it has set all bean properties
and satisfied BeanFactoryAware
, ApplicationContextAware
etc.
This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet
in interface InitializingBean
net.sf.ehcache.CacheException
protected net.sf.ehcache.Cache createCache()
protected net.sf.ehcache.Ehcache decorateCache(net.sf.ehcache.Ehcache cache)
cache
- the raw Cache object, based on the configuration of this FactoryBean@Nullable public net.sf.ehcache.Ehcache getObject()
FactoryBean
As with a BeanFactory
, this allows support for both the
Singleton and Prototype design pattern.
If this FactoryBean is not fully initialized yet at the time of
the call (for example because it is involved in a circular reference),
throw a corresponding FactoryBeanNotInitializedException
.
As of Spring 2.0, FactoryBeans are allowed to return null
objects. The factory will consider this as normal value to be used; it
will not throw a FactoryBeanNotInitializedException in this case anymore.
FactoryBean implementations are encouraged to throw
FactoryBeanNotInitializedException themselves now, as appropriate.
getObject
in interface FactoryBean<net.sf.ehcache.Ehcache>
null
)FactoryBeanNotInitializedException
public Class<? extends net.sf.ehcache.Ehcache> getObjectType()
Ehcache
implementation that will be returned from
getObject()
based on logic in createCache()
and
decorateCache(Ehcache)
as orchestrated by afterPropertiesSet()
.getObjectType
in interface FactoryBean<net.sf.ehcache.Ehcache>
null
if not known at the time of the callListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
always return the same object
(a reference that can be cached)?
NOTE: If a FactoryBean indicates to hold a singleton object,
the object returned from getObject()
might get cached
by the owning BeanFactory. Hence, do not return true
unless the FactoryBean always exposes the same reference.
The singleton status of the FactoryBean itself will generally be provided by the owning BeanFactory; usually, it has to be defined as singleton there.
NOTE: This method returning false
does not
necessarily indicate that returned objects are independent instances.
An implementation of the extended SmartFactoryBean
interface
may explicitly indicate independent instances through its
SmartFactoryBean.isPrototype()
method. Plain FactoryBean
implementations which do not implement this extended interface are
simply assumed to always return independent instances if the
isSingleton()
implementation returns false
.
The default implementation returns true
, since a
FactoryBean
typically manages a singleton instance.
isSingleton
in interface FactoryBean<net.sf.ehcache.Ehcache>
FactoryBean.getObject()
,
SmartFactoryBean.isPrototype()