Можно ли аннотировать метод как кешируемый в Spring? - PullRequest
0 голосов
/ 14 сентября 2010

Я хотел бы использовать аннотацию, помечающую результат вызова метода как кешируемый. При наличии он будет использовать поставщик кэширования для кэширования вывода для данного ввода. Например:

@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, так и кэширование, кажется, что это было бы естественным образом для этого варианта использования.

Существует ли такая функция?

Ответы [ 2 ]

1 голос
/ 10 августа 2012

код Google больше не требуется, так как Spring имеет его из коробки: http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html#cache-store-configuration-ehcache

1 голос
/ 14 сентября 2010

Этот модуль имеет то, что вы хотите. (Но на самом деле это довольно просто реализовать)

...