Unless中如何配置
时间: 2023-08-01 20:07:11 浏览: 214
thymeleaf_3.0.5_中文参考手册
`unless` 是 Spring Cache 抽象中的一个属性,它用于定义一个 SpEL 表达式,用于决定哪些方法调用的返回值不会被缓存。在使用 Spring Cache 时,可以在 `@Cacheable`、`@CachePut`、`@CacheEvict` 等注解中通过 `unless` 属性来配置。
下面是一个示例,使用 `unless` 属性来配置不缓存返回值为负数的方法调用:
```java
@Cacheable(cacheNames = "myCache", unless = "#result < 0")
public int myMethod(int arg) {
// do something
return result;
}
```
在上面的示例中,`unless` 属性的值是一个 SpEL 表达式,它的含义是如果方法调用的返回值小于 0,则不会将返回值缓存起来。注意,这里使用了 `#result` 变量来引用方法调用的返回值。
除了值为 SpEL 表达式的方式外,`unless` 属性还可以接受一个字符串数组,指定一个或多个 SpEL 表达式的名称。在这种情况下,需要在应用程序的配置文件中定义这些 SpEL 表达式。例如:
```java
@Cacheable(cacheNames = "myCache", unless = {"#mySpELExpression"})
public int myMethod(int arg) {
// do something
return result;
}
```
在应用程序的配置文件中,需要定义名为 `mySpELExpression` 的 SpEL 表达式,例如:
```properties
mySpELExpression= #result < 0
```
需要注意的是,`unless` 属性只能用于 `@Cacheable`、`@CachePut`、`@CacheEvict` 等注解中,不能用于 `@Caching` 注解中。另外,`unless` 属性指定的 SpEL 表达式不会影响方法的返回值,它只会影响缓存的行为。
阅读全文