`@Cacheable` caches the result of a method call under a key (usually based on arguments). It’s implemented via proxies/AOP. Common gotchas: self-invocation bypasses the proxy (no caching), and caching can serve stale data unless you evict/invalidate (`@CacheEvict`) or set a TTL in the cache provider.
Expanding on the short answer — what usually matters in practice:
A tiny example (an explanation template):
// Example: discuss trade-offs for "`@cacheable`:-how-does-spring-caching-work-and-n"
function explain() {
// Start from the core idea:
// `@Cacheable` caches the result of a method call under a key (usually based on arguments).
}