Spring Redis Cache не выселяется

Следующие работы (приводят к выселению):

fooController {
    @ApiEndpoint
    public delete(id) {
        fooService.deleteFoo(id)
    }
}

fooService {
    @CacheEvict(value = "cache1", key = "#id")
    public void deleteFoo(Long id) {
        //delete logic here
    }
}

Но это не работает (из кеша ничего не вытесняется):

fooController {
    @ApiEndpoint
    public delete(name) {
        fooService.deleteFoo2(name)
    }
}

fooService {
    public void deleteFoo2(String name) {
        //delete logic here
        deleteFoo(name.getId())
    }

    @CacheEvict(value = "cache1", key = "#id")
    public void deleteFoo(Long id) {
        //delete logic here
    }
}

Почему мои аннотации @CacheEvict вызываются только тогда, когда метод вызывается прямо из контроллера?

Я использую Redis в качестве механизма кеширования.

2 ответа

Aop не беспокоится, когда ваш метод вызывается внутри класса. Он работает, когда метод вызывается другим классом. Таким образом, вы можете определить deleteFoo в другом сервисе.

Чтобы сделать перехват весеннего аспекта @Cache*аннотации вы должны сделать внешний вызов. Если вам не нравится вызывать этот метод из другого объекта, используйте подход с самовызовом компонента . В этом случае ваш класс представлен как два объекта, и один вызывает другой:

      @Resource private FooController thisBean;

public delete(id) {
  thisBean.deleteFoo(id)
}

@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {}
Другие вопросы по тегам