Я пытаюсь использовать механизм абстракции строкового кэша с помощью графических модулей. Я создал перехватчики:Не удается выселить из Spring Cache в Guice DI app
CacheManager cacheManager = createCacheManager(); bind (CacheManager.class) .toInstance (cacheManager);
AppCacheInterceptor interceptor = new AppCacheInterceptor(
cacheManager,
createCacheOperationSource()
);
bindInterceptor(
Matchers.any(),
Matchers.annotatedWith(Cacheable.class),
interceptor
);
bindInterceptor(
Matchers.any(),
Matchers.annotatedWith(CacheEvict.class),
interceptor
);
Затем реализован интерфейс Строки кэша и CacheManager, и, наконец, аннотированный мои классы DAO с @Cachable и @CacheEvict:
public class DaoTester {
QssandraConsumer qs;
@CachePut(value = "cached_consumers", key = "#consumer.id")
public void save(QssandraConsumer consumer) {
qs = consumer;
}
@Cacheable(value = "cached_consumers")
public QssandraConsumer get(String id) {
if (id != null) {
qs.getId();
}
return qs;
}
@CacheEvict(value = "cached_consumers", key = "#consumer.id")
public void remove(QssandraConsumer consumer) {
qs = consumer;
}}
Кэширование не просто отлично - никаких проблем здесь, но когда я пытаюсь выселить (вызов метода удаления в данном примере), Evrything аварий и вижу:
Исключение в потоке «основного» org.springframework.expression.spel.SpelEvaluationException: EL1007E: (поз 10): поле или свойство «идентификатор 'ca Nnot быть найдены на нуль в org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty (PropertyOrFieldReference.java:205) в org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference.java:72) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal (CompoundExpression.java:57) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue (SpelNodeImpl.java:93) at org.springframework.expression .spel.standard.SpelExpression.getValue (SpelExpression.java:88) at org.springframework.cache.interceptor.ExpressionEvaluator.key (ExpressionEvaluator.java:80) at org.springframework.cache.interceptor.CacheAspectSupport $ CacheOperationContext.generateKey (CacheAspectSupport.java:464) в org.springframework.cache.interceptor.CacheAspectSupport.inspectCacheEvicts (CacheAspectSupport.java:260) на org.springframework.cache.interceptor.CacheAspectSupport.inspectAfterCacheEvicts (CacheAspectSupport.java:232) в org.springframework.cache.interceptor. CacheAspectSupport.execute (CacheAspectSupport.java:215) на org.springframework.cache.interceptor.CacheInterceptor.invoke (CacheInterceptor.java:66) на qiwi.qommon.deployment.dao.DaoTester.main (DaoTester.java:44) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) на java.lang.reflect.Method.invoke (Method.java:597) в com.intellij.rt.execution.application.AppMain.main (AppMain.java:120)
Что здесь не так ?! BTW, кэшировать объект:
public class QssandraConsumer implements Identifiable<String> {
private String id;
private String host;
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (null == object) {
return false;
}
if (!(object instanceof QssandraConsumer)) {
return false;
}
QssandraConsumer o = (QssandraConsumer) object;
return
Objects.equal(id, o.id)
&& Objects.equal(host, o.host);
}
@Override
public int hashCode() {
return Objects.hashCode(
id, host
);
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.addValue(id)
.addValue(host)
.toString();
}
}