Я хотел бы использовать аннотацию, помечающую результат вызова метода как кешируемый. При наличии он будет использовать поставщик кэширования для кэширования вывода для данного ввода. Например:
@Cacheable
public Bar doExpensiveCalculation(Foo foo) {
Bar bar = jiggeryPokeryWith(foo);
return bar;
}
...
Foo foo1 = new Foo(...);
Foo foo2 = new Foo(...);
Bar bar1 = doExpensiveCalculation(foo1);
Bar bar2 = doExpensiveCalculation(foo2);
Bar bar3 = doExpensiveCalculation(foo1);
// no calculation done on previous line, cached result == bar1
В конце этого примера кэш будет содержать
{doExpensiveCalculation(foo1) -> bar1,
doExpensiveCalculation(foo2) -> bar2}
Я уверен, что это возможно при использовании АОП. Поскольку Spring выполняет как AOP, так и кэширование, кажется, что это было бы естественным образом для этого варианта использования.
Существует ли такая функция?