@EnableCaching
- 作用: 这是一个Spring Boot配置注解,用于启用Spring Cache缓存功能。当你在Spring Boot应用程序中使用这个注解时,就会自动配置Spring Cache所需的基础设施,包括缓存管理器、缓存解析器等。
- 用法:
@SpringBootApplication @EnableCaching public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
- 参数:
mode
: 指定缓存的执行模式,可选值有PROXY
和ASPECTJ
。默认为PROXY
。proxyTargetClass
: 当mode
设置为PROXY
时,是否使用CGLIB代理。默认为false
,使用JDK动态代理。order
: 指定缓存切面的执行顺序。数值越小,优先级越高
-
使用场景:
- 在Spring Boot应用程序中启用缓存功能,让开发者可以使用
@Cacheable
、@CachePut
和@CacheEvict
等注解来控制方法的缓存行为。 - 通过配置
mode
和proxyTargetClass
参数,可以选择合适的缓存代理模式。 - 通过配置
order
参数,可以控制缓存切面的执行顺序,与其他切面的执行顺序进行协调。
- 在Spring Boot应用程序中启用缓存功能,让开发者可以使用
-
配合其他注解使用:
@EnableCaching
通常与其他Spring Boot配置注解一起使用,如@SpringBootApplication
、@Configuration
等,形成一个完整的Spring Boot应用程序。- 在使用
@EnableCaching
之后,开发者就可以在业务方法上使用@Cacheable
、@CachePut
和@CacheEvict
等注解来控制缓存行为
@Cacheable
- 作用: 标注在方法上,声明这个方法的返回值需要被缓存。当下次调用这个方法时,如果缓存中存在对应的值,则直接从缓存中获取,否则执行方法并将结果存入缓存。
- 参数:
unless
: 缓存排除条件,满足条件时不缓存,支持 SpEL 表达式。condition
: 缓存条件,满足条件时才缓存,支持 SpEL 表达式。key
: 缓存时使用的 key,支持 SpEL 表达式。cacheNames/value
: 缓存名称,可以指定多个。
- 用法:
@Cacheable(cacheNames = "books", key = "#id") public Book getBookById(Long id) { // 实际查询数据库的代码 return bookRepository.findById(id); }
@CachePut
- 作用: 标注在方法上,无论方法是否已经被缓存,都会执行方法,并将方法的返回值更新到缓存中。
- 用法:
@CachePut(cacheNames = "books", key = "#book.id") public Book updateBook(Book book) { // 实际更新数据库的代码 return bookRepository.save(book); }
- 参数:
cacheNames/value
: 缓存名称,可以指定多个。key
: 缓存时使用的 key,支持 SpEL 表达式。condition
: 缓存条件,满足条件时才缓存,支持 SpEL 表达式。
@CacheEvict
- 作用: 标注在方法上,表示在执行该方法后,将从缓存中移除相应的数据。
- 用法:
@CacheEvict(cacheNames = "books", key = "#id") public void deleteBookById(Long id) { // 实际删除数据库中的数据 bookRepository.deleteById(id); }
- 参数:
cacheNames/value
: 缓存名称,可以指定多个。key
: 缓存时使用的 key,支持 SpEL 表达式。condition
: 缓存条件,满足条件时才执行缓存清除,支持 SpEL 表达式。allEntries
: 是否清除缓存中的所有元素。