1. 方法调用方式
@CachePut
注解仅适用于通过 Spring 管理的 bean 的代理调用。如果方法是在同一个类内部直接调用的(即 self-invocation),那么 Spring 的 AOP 代理将不会生效,@CachePut
注解也就无法起作用。
解决方案
将方法移动到另一个 bean 中:将 updateConfigFields
方法移动到另一个 Spring 管理的 bean 中,并通过依赖注入的方式调用。
示例
假设你有一个 FormFieldService
类和一个 CacheService
类,你可以将 updateConfigFields
方法移动到 CacheService
类中:
@Service
public class CacheService {
@CachePut(value = "anins:cache:formField", key = "#tenantId + ':' + #code")
public List<FieldMetaDTO> updateConfigFields(String code, String tenantId) {
// 方法实现
}
}
然后在 FormFieldService
类中注入 CacheService
并调用其方法:
@Service
public class FormFieldService {
@Autowired
private CacheService cacheService;
public void saveOrUpdateField(FormField formField) {
// ... 现有逻辑 ...
cacheService.updateConfigFields(code, iTenantApi.getCurrentTenantId());
}
}
2.方法返回值
@CachePut 注解要求方法有一个非 null 的返回值,该返回值将被放入缓存中。如果方法返回 null,则缓存将不会被更新。