The @EnableCaching annotation turns on caching support in a Spring Boot app. It helps store data temporarily to make your app faster.
When you want to speed up repeated data fetching in your app.
When you have expensive operations like database calls or API requests.
When you want to reduce load on your backend services.
When you want to improve user experience by showing results faster.
Syntax
Spring Boot
@EnableCaching
@Configuration
public class CacheConfig {
// cache setup here
}
Place @EnableCaching on a configuration class to activate caching.
It works together with cache annotations like @Cacheable on methods.
Examples
Basic setup to enable caching in your Spring Boot app.
Spring Boot
@EnableCaching
@Configuration
public class AppConfig {
}
Enable caching directly in the main application class.
Spring Boot
@SpringBootApplication
@EnableCaching
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Sample Program
This example shows how @EnableCaching activates caching. The first call to getData("apple") prints the fetching message and returns data. The second call with the same argument returns cached data without printing the fetching message.
Spring Boot
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Service;
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {
public static void main(String[] args) {
var context = SpringApplication.run(CacheDemoApplication.class, args);
var service = context.getBean(DataService.class);
System.out.println(service.getData("apple"));
System.out.println(service.getData("apple"));
}
}
@Service
class DataService {
@Cacheable("fruits")
public String getData(String name) {
System.out.println("Fetching data for " + name);
return"Data for " + name;
}
}
OutputSuccess
Important Notes
Without @EnableCaching, cache annotations like @Cacheable won't work.
Caching improves speed but be careful with stale data; clear cache when needed.
Summary
@EnableCaching turns on caching in Spring Boot apps.
Use it with @Cacheable to store method results temporarily.
It helps make apps faster by avoiding repeated work.
Practice
(1/5)
1. What is the main purpose of the @EnableCaching annotation in a Spring Boot application?
easy
A. To activate caching support so methods annotated with @Cacheable can cache results
B. To disable all caching mechanisms in the application
C. To configure database connections automatically
D. To enable security features for REST endpoints
Solution
Step 1: Understand @EnableCaching role
This annotation activates Spring's caching support, allowing caching annotations to work.
Step 2: Connect with @Cacheable
Methods annotated with @Cacheable store their results in cache only if caching is enabled.
Final Answer:
To activate caching support so methods annotated with @Cacheable can cache results -> Option A
Quick Check:
@EnableCaching enables caching [OK]
Hint: Remember: @EnableCaching turns caching ON [OK]
Common Mistakes:
Thinking @EnableCaching disables caching
Confusing it with database or security annotations
Assuming it caches data by itself without @Cacheable
2. Which of the following is the correct way to enable caching in a Spring Boot application?
easy
A. @CacheEnable
B. @EnableCache
C. @EnableCaching
D. @CachingEnable
Solution
Step 1: Recall the exact annotation name
The correct annotation to enable caching is @EnableCaching.
Step 2: Check other options for typos
Options B, C, and D are incorrect because they are not valid Spring annotations.
Final Answer:
@EnableCaching -> Option C
Quick Check:
Correct annotation spelling is @EnableCaching [OK]
Hint: Look for exact spelling: EnableCaching, not EnableCache [OK]
Common Mistakes:
Using incorrect annotation names with similar words
Missing the capital 'C' in Caching
Confusing with other Spring annotations
3. Given the following Spring Boot code snippet, what will be the output when getData() is called twice?
@EnableCaching
@Service
public class DataService {
private int count = 0;
@Cacheable("dataCache")
public String getData() {
count++;
return "Call number: " + count;
}
}
medium
A. ["Call number: 1", "Call number: 1"]
B. ["Call number: 2", "Call number: 2"]
C. ["Call number: 0", "Call number: 1"]
D. ["Call number: 1", "Call number: 2"]
Solution
Step 1: Understand caching effect on method calls
The first call to getData() runs the method, increments count to 1, and caches the result.
Step 2: Analyze second call behavior
The second call returns the cached result without running the method again, so count stays 1.
Assuming count increments on every call despite caching
Ignoring that @Cacheable caches method output
Confusing cache key usage
4. Identify the error in the following Spring Boot configuration that prevents caching from working:
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("items");
}
}
medium
A. Cache name "items" is invalid
B. Missing @EnableCaching annotation on configuration class
C. CacheManager bean should return null
D. CacheManager must be annotated with @Service
Solution
Step 1: Check caching activation
Defining a CacheManager bean is not enough; caching must be enabled with @EnableCaching.
Step 2: Verify other options
CacheManager returning null or invalid cache names are incorrect; @Service is unrelated here.
Final Answer:
Missing @EnableCaching annotation on configuration class -> Option B
Quick Check:
Enable caching with @EnableCaching [OK]
Hint: Always add @EnableCaching to activate caching [OK]
Common Mistakes:
Forgetting to add @EnableCaching annotation
Misunderstanding CacheManager bean role
Wrong annotation usage on CacheManager
5. You want to cache results of a method that takes a user ID and returns user details. You also want to clear the cache when user data updates. Which combination of annotations and configuration correctly achieves this in Spring Boot?
hard
A. Use @EnableCaching on service class, @CachePut("users") on get method, and no annotation on update method
B. Use @CacheEvict on config class, @EnableCaching on update method, and no caching on get method
C. Use @Cacheable("users") on config class, @EnableCaching on get method, and @CacheEvict on update method
D. Use @EnableCaching on config class, @Cacheable("users") on get method, and @CacheEvict(value = "users", key = "#userId") on update method
Solution
Step 1: Enable caching globally
Add @EnableCaching on a configuration or main class to activate caching support.
Step 2: Cache method results and evict on update
Use @Cacheable("users") on the method fetching user details to cache results. Use @CacheEvict(value = "users", key = "#userId") on the update method to clear cache for that user.
Final Answer:
Use @EnableCaching on config class, @Cacheable("users") on get method, and @CacheEvict(value = "users", key = "#userId") on update method -> Option D
Quick Check:
Enable caching + cache get + evict on update [OK]
Hint: Enable caching, cache gets, evict on updates [OK]
Common Mistakes:
Not enabling caching globally with @EnableCaching
Using @CachePut instead of @CacheEvict for clearing cache
Placing annotations on wrong classes or methods
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.