Bird
Raised Fist0
Spring Bootframework~10 mins

@EnableCaching annotation in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - @EnableCaching annotation
Start Application
↓
Spring Boot scans for @EnableCaching
↓
Enable Cache Infrastructure
↓
Detect @Cacheable, @CachePut, @CacheEvict
↓
Wrap methods with caching logic
↓
On method call: Check cache
↓
Return cached
↓
Store result in cache
↓
Return result
↓
End
This flow shows how Spring Boot detects @EnableCaching, sets up caching, and intercepts method calls to use or update the cache.
Execution Sample
Spring Boot
@SpringBootApplication
@EnableCaching
public class App {
  @Cacheable("books")
  public Book getBook(String id) {
    // fetch book from DB
  }
}
This code enables caching and caches results of getBook method by book id.
Execution Table
StepActionCache StateMethod CallCache Hit?Result Returned
1Application starts, @EnableCaching detectedEmptyNoN/AN/A
2Call getBook("123")EmptyYesNoFetch from DB
3Store result in cache key "123"Contains key "123"NoN/AN/A
4Call getBook("123") againContains key "123"YesYesReturn cached book
5Call getBook("456")Contains keys "123"YesNoFetch from DB
6Store result in cache key "456"Contains keys "123", "456"NoN/AN/A
7Call getBook("123") againContains keys "123", "456"YesYesReturn cached book
💡 Execution stops when no more method calls occur.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 5After Step 6Final
cache{}{"123": Book123}{"123": Book123}{"123": Book123}{"123": Book123, "456": Book456}{"123": Book123, "456": Book456}
Key Moments - 2 Insights
Why does the method execute the first time but not the second time for the same argument?
At step 2, the cache is empty so the method runs and result is stored (step 3). At step 4, the cache has the key so the cached result is returned without running the method.
What happens if a new argument is passed to the cached method?
At step 5, the argument "456" is not in cache, so the method runs and stores the result (step 6). This shows caching is per argument.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the cache state after step 3?
AContains key "123"
BEmpty
CContains keys "123" and "456"
DContains key "456" only
💡 Hint
Check the 'Cache State' column at step 3 in the execution table.
At which step does the method getBook("123") return a cached result?
AStep 2
BStep 4
CStep 5
DStep 6
💡 Hint
Look for 'Cache Hit?' column for getBook("123") calls in the execution table.
If @EnableCaching was removed, how would the cache state change after step 3?
ACache would still contain key "123"
BCache would remain empty
CCache would contain keys "123" and "456"
DCache would contain key "456" only
💡 Hint
Without @EnableCaching, caching is not activated, so cache stays empty.
Concept Snapshot
@EnableCaching enables Spring's caching support.
Add @EnableCaching on a config class to activate caching.
Use @Cacheable on methods to cache results by arguments.
On method call, cache is checked first.
If cached, return cached result; else run method and cache result.
Caching improves performance by avoiding repeated work.
Full Transcript
The @EnableCaching annotation tells Spring Boot to turn on caching features. When the app starts, Spring scans for this annotation and sets up caching behind the scenes. Methods marked with @Cacheable will have their results saved in a cache after the first call. Later calls with the same arguments return the cached result instead of running the method again. This saves time and resources. The execution table shows how the cache starts empty, fills with results after method calls, and returns cached data on repeated calls. Without @EnableCaching, caching does not happen and the cache stays empty. This simple setup helps apps run faster by reusing previous results.

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

  1. Step 1: Understand @EnableCaching role

    This annotation activates Spring's caching support, allowing caching annotations to work.
  2. Step 2: Connect with @Cacheable

    Methods annotated with @Cacheable store their results in cache only if caching is enabled.
  3. Final Answer:

    To activate caching support so methods annotated with @Cacheable can cache results -> Option A
  4. 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

  1. Step 1: Recall the exact annotation name

    The correct annotation to enable caching is @EnableCaching.
  2. Step 2: Check other options for typos

    Options B, C, and D are incorrect because they are not valid Spring annotations.
  3. Final Answer:

    @EnableCaching -> Option C
  4. 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

  1. Step 1: Understand caching effect on method calls

    The first call to getData() runs the method, increments count to 1, and caches the result.
  2. Step 2: Analyze second call behavior

    The second call returns the cached result without running the method again, so count stays 1.
  3. Final Answer:

    ["Call number: 1", "Call number: 1"] -> Option A
  4. Quick Check:

    Cache returns same result on repeated calls [OK]
Hint: Cached method runs once; repeated calls return cached result [OK]
Common Mistakes:
  • 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

  1. Step 1: Check caching activation

    Defining a CacheManager bean is not enough; caching must be enabled with @EnableCaching.
  2. Step 2: Verify other options

    CacheManager returning null or invalid cache names are incorrect; @Service is unrelated here.
  3. Final Answer:

    Missing @EnableCaching annotation on configuration class -> Option B
  4. 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

  1. Step 1: Enable caching globally

    Add @EnableCaching on a configuration or main class to activate caching support.
  2. 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.
  3. Final Answer:

    Use @EnableCaching on config class, @Cacheable("users") on get method, and @CacheEvict(value = "users", key = "#userId") on update method -> Option D
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard