3 Stimmen

Spring 3.1 cache - wie den zurückgegebenen Wert im SpEL verwenden

Ich versuche, eine Entfernung eines Eintrags in einem von Spring verwalteten Cache (Spring 3.1 Abstraktion) zu machen.

Ich muss auf den zurückgegebenen Wert der Methode im SpEL der "key" Eigenschaft in der Annotation verweisen:

 /* (Wie kann auf den zurückgegebenen Wert 'T' in "KEY_ID" verwiesen werden?) */
@Caching(evict = { @CacheEvict(value = CACHE_BY_ID, key = KEY_ID) })
public T delete(AppID appID, UserID userID) throws UserNotFoundException {
    return inner.delete(appID, userID);
}

Gibt es eine Möglichkeit, das zu tun?

2voto

sdouglass Punkte 2280

Es scheint keine Möglichkeit zu geben, auf das zurückgegebene Objekt zu verweisen:

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/cache.html#cache-spel-context

Aber warum brauchst du das? Du kannst auf die Argumente im @CacheEvict "key" Wert verweisen, z.B.:

@CacheEvict(value = CACHE_BY_ID, key = "#userID")
public T delete(AppID appID, UserID userID) throws UserNotFoundException {
...
}

Weitere Beispielcode in Antwort auf die untenstehende Antwort, dass man aus mehreren Caches, die verschiedene Eigenschaften eines Benutzerobjekts verwenden, entfernen muss:

@Caching(evict = {
    @CacheEvict(value = CACHE_BY_ID, key = "#user.userID"),
    @CacheEvict(value = CACHE_BY_LOGIN_NAME, key = "#user.loginName")
    // usw.
})
public T delete(AppID appID, User user) throws UserNotFoundException {
...
}

2voto

Matt Broekhuis Punkte 1895

Versuchen Sie, #result in Ihrem SpEL zu verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X