/*
 * Copyright 2002-2020 the original author or authors.
 *
 * 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
 *
 *      https://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.springframework.cache.support;

import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.lang.Nullable;

A basic, no operation CacheManager implementation suitable for disabling caching, typically used for backing cache declarations without an actual backing store.

Will simply accept any items into the cache not actually storing them.

Author:Costin Leau, Stephane Nicoll
See Also:
Since:3.1
/** * A basic, no operation {@link CacheManager} implementation suitable * for disabling caching, typically used for backing cache declarations * without an actual backing store. * * <p>Will simply accept any items into the cache not actually storing them. * * @author Costin Leau * @author Stephane Nicoll * @since 3.1 * @see NoOpCache */
public class NoOpCacheManager implements CacheManager { private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap<>(16); private final Set<String> cacheNames = new LinkedHashSet<>(16);
This implementation always returns a Cache implementation that will not store items. Additionally, the request cache will be remembered by the manager for consistency.
/** * This implementation always returns a {@link Cache} implementation that will not store items. * Additionally, the request cache will be remembered by the manager for consistency. */
@Override @Nullable public Cache getCache(String name) { Cache cache = this.caches.get(name); if (cache == null) { this.caches.computeIfAbsent(name, key -> new NoOpCache(name)); synchronized (this.cacheNames) { this.cacheNames.add(name); } } return this.caches.get(name); }
This implementation returns the name of the caches previously requested.
/** * This implementation returns the name of the caches previously requested. */
@Override public Collection<String> getCacheNames() { synchronized (this.cacheNames) { return Collections.unmodifiableSet(this.cacheNames); } } }