提交 8aa0b077 编写于 作者: J Juergen Hoeller

Consistent early eviction tests in regular and transactional scenarios

See gh-23192
上级 be65bef9
...@@ -38,7 +38,7 @@ public class AspectJCacheAnnotationTests extends AbstractCacheAnnotationTests { ...@@ -38,7 +38,7 @@ public class AspectJCacheAnnotationTests extends AbstractCacheAnnotationTests {
} }
@Test @Test
public void testKeyStrategy() throws Exception { public void testKeyStrategy() {
AnnotationCacheAspect aspect = ctx.getBean( AnnotationCacheAspect aspect = ctx.getBean(
"org.springframework.cache.config.internalCacheAspect", AnnotationCacheAspect.class); "org.springframework.cache.config.internalCacheAspect", AnnotationCacheAspect.class);
assertThat(aspect.getKeyGenerator()).isSameAs(ctx.getBean("keyGenerator")); assertThat(aspect.getKeyGenerator()).isSameAs(ctx.getBean("keyGenerator"));
......
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -33,11 +33,13 @@ import org.springframework.cache.annotation.Caching; ...@@ -33,11 +33,13 @@ import org.springframework.cache.annotation.Caching;
public class AnnotatedClassCacheableService implements CacheableService<Object> { public class AnnotatedClassCacheableService implements CacheableService<Object> {
private final AtomicLong counter = new AtomicLong(); private final AtomicLong counter = new AtomicLong();
public static final AtomicLong nullInvocations = new AtomicLong(); public static final AtomicLong nullInvocations = new AtomicLong();
@Override @Override
public Object cache(Object arg1) { public Object cache(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -48,7 +50,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -48,7 +50,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
@Override @Override
@Cacheable(cacheNames = "testCache", sync = true) @Cacheable(cacheNames = "testCache", sync = true)
public Object cacheSync(Object arg1) { public Object cacheSync(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -68,13 +70,14 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -68,13 +70,14 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
} }
@Override @Override
@Cacheable(cacheNames = "testCache", unless = "#result > 10")
public Object unless(int arg) { public Object unless(int arg) {
return arg; return arg;
} }
@Override @Override
@CacheEvict("testCache") @CacheEvict(cacheNames = "testCache", key = "#p0")
public void invalidate(Object arg1) { public void evict(Object arg1, Object arg2) {
} }
@Override @Override
...@@ -83,11 +86,6 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -83,11 +86,6 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
throw new RuntimeException("exception thrown - evict should NOT occur"); throw new RuntimeException("exception thrown - evict should NOT occur");
} }
@Override
@CacheEvict(cacheNames = "testCache", allEntries = true)
public void evictAll(Object arg1) {
}
@Override @Override
@CacheEvict(cacheNames = "testCache", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", beforeInvocation = true)
public void evictEarly(Object arg1) { public void evictEarly(Object arg1) {
...@@ -95,68 +93,68 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -95,68 +93,68 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0") @CacheEvict(cacheNames = "testCache", allEntries = true)
public void evict(Object arg1, Object arg2) { public void evictAll(Object arg1) {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", allEntries = true, beforeInvocation = true)
public void invalidateEarly(Object arg1, Object arg2) { public void evictAllEarly(Object arg1) {
throw new RuntimeException("exception thrown - evict should still occur"); throw new RuntimeException("exception thrown - evict should still occur");
} }
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#p0") @Cacheable(cacheNames = "testCache", key = "#p0")
public Object key(Object arg1, Object arg2) { public Object key(Object arg1, Object arg2) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable("testCache") @Cacheable("testCache")
public Object varArgsKey(Object... args) { public Object varArgsKey(Object... args) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.caches[0].name") @Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.caches[0].name")
public Object name(Object arg1) { public Object name(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target") @Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
public Object rootVars(Object arg1) { public Object rootVars(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", keyGenerator = "customKyeGenerator") @Cacheable(cacheNames = "testCache", keyGenerator = "customKyeGenerator")
public Object customKeyGenerator(Object arg1) { public Object customKeyGenerator(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName") @Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName")
public Object unknownCustomKeyGenerator(Object arg1) { public Object unknownCustomKeyGenerator(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager") @Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager")
public Object customCacheManager(Object arg1) { public Object customCacheManager(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName") @Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName")
public Object unknownCustomCacheManager(Object arg1) { public Object unknownCustomCacheManager(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@CachePut("testCache") @CachePut("testCache")
public Object update(Object arg1) { public Object update(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -203,25 +201,25 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -203,25 +201,25 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
@Override @Override
@Caching(cacheable = { @Cacheable("primary"), @Cacheable("secondary") }) @Caching(cacheable = { @Cacheable("primary"), @Cacheable("secondary") })
public Object multiCache(Object arg1) { public Object multiCache(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#a0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") }) @Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#a0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") })
public Object multiEvict(Object arg1) { public Object multiEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") }) @Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
public Object multiCacheAndEvict(Object arg1) { public Object multiCacheAndEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#a0 == 3") }, evict = { @CacheEvict("secondary") }) @Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#a0 == 3") }, evict = { @CacheEvict("secondary") })
public Object multiConditionalCacheAndEvict(Object arg1) { public Object multiConditionalCacheAndEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
......
/* /*
* Copyright 2002-2015 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package org.springframework.cache.config; package org.springframework.cache.config;
/** /**
* Basic service interface. * Basic service interface for caching tests.
* *
* @author Costin Leau * @author Costin Leau
* @author Phillip Webb * @author Phillip Webb
...@@ -33,17 +33,15 @@ public interface CacheableService<T> { ...@@ -33,17 +33,15 @@ public interface CacheableService<T> {
T cacheSyncNull(Object arg1); T cacheSyncNull(Object arg1);
void invalidate(Object arg1); void evict(Object arg1, Object arg2);
void evictWithException(Object arg1);
void evictEarly(Object arg1); void evictEarly(Object arg1);
void evictAll(Object arg1); void evictAll(Object arg1);
void evictWithException(Object arg1); void evictAllEarly(Object arg1);
void evict(Object arg1, Object arg2);
void invalidateEarly(Object arg1, Object arg2);
T conditional(int field); T conditional(int field);
...@@ -83,7 +81,6 @@ public interface CacheableService<T> { ...@@ -83,7 +81,6 @@ public interface CacheableService<T> {
T throwUncheckedSync(Object arg1); T throwUncheckedSync(Object arg1);
// multi annotations
T multiCache(Object arg1); T multiCache(Object arg1);
T multiEvict(Object arg1); T multiEvict(Object arg1);
......
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -25,7 +25,7 @@ import org.springframework.cache.annotation.Cacheable; ...@@ -25,7 +25,7 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
/** /**
* Simple cacheable service * Simple cacheable service.
* *
* @author Costin Leau * @author Costin Leau
* @author Phillip Webb * @author Phillip Webb
...@@ -34,12 +34,14 @@ import org.springframework.cache.annotation.Caching; ...@@ -34,12 +34,14 @@ import org.springframework.cache.annotation.Caching;
public class DefaultCacheableService implements CacheableService<Long> { public class DefaultCacheableService implements CacheableService<Long> {
private final AtomicLong counter = new AtomicLong(); private final AtomicLong counter = new AtomicLong();
private final AtomicLong nullInvocations = new AtomicLong(); private final AtomicLong nullInvocations = new AtomicLong();
@Override @Override
@Cacheable("testCache") @Cacheable("testCache")
public Long cache(Object arg1) { public Long cache(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -51,7 +53,7 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -51,7 +53,7 @@ public class DefaultCacheableService implements CacheableService<Long> {
@Override @Override
@Cacheable(cacheNames = "testCache", sync = true) @Cacheable(cacheNames = "testCache", sync = true)
public Long cacheSync(Object arg1) { public Long cacheSync(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -61,8 +63,8 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -61,8 +63,8 @@ public class DefaultCacheableService implements CacheableService<Long> {
} }
@Override @Override
@CacheEvict("testCache") @CacheEvict(cacheNames = "testCache", key = "#p0")
public void invalidate(Object arg1) { public void evict(Object arg1, Object arg2) {
} }
@Override @Override
...@@ -71,11 +73,6 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -71,11 +73,6 @@ public class DefaultCacheableService implements CacheableService<Long> {
throw new RuntimeException("exception thrown - evict should NOT occur"); throw new RuntimeException("exception thrown - evict should NOT occur");
} }
@Override
@CacheEvict(cacheNames = "testCache", allEntries = true)
public void evictAll(Object arg1) {
}
@Override @Override
@CacheEvict(cacheNames = "testCache", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", beforeInvocation = true)
public void evictEarly(Object arg1) { public void evictEarly(Object arg1) {
...@@ -83,26 +80,26 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -83,26 +80,26 @@ public class DefaultCacheableService implements CacheableService<Long> {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0") @CacheEvict(cacheNames = "testCache", allEntries = true)
public void evict(Object arg1, Object arg2) { public void evictAll(Object arg1) {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", allEntries = true, beforeInvocation = true)
public void invalidateEarly(Object arg1, Object arg2) { public void evictAllEarly(Object arg1) {
throw new RuntimeException("exception thrown - evict should still occur"); throw new RuntimeException("exception thrown - evict should still occur");
} }
@Override @Override
@Cacheable(cacheNames = "testCache", condition = "#p0 == 3") @Cacheable(cacheNames = "testCache", condition = "#p0 == 3")
public Long conditional(int classField) { public Long conditional(int classField) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", sync = true, condition = "#p0 == 3") @Cacheable(cacheNames = "testCache", sync = true, condition = "#p0 == 3")
public Long conditionalSync(int field) { public Long conditionalSync(int classField) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -114,55 +111,55 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -114,55 +111,55 @@ public class DefaultCacheableService implements CacheableService<Long> {
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#p0") @Cacheable(cacheNames = "testCache", key = "#p0")
public Long key(Object arg1, Object arg2) { public Long key(Object arg1, Object arg2) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache") @Cacheable(cacheNames = "testCache")
public Long varArgsKey(Object... args) { public Long varArgsKey(Object... args) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#root.methodName") @Cacheable(cacheNames = "testCache", key = "#root.methodName")
public Long name(Object arg1) { public Long name(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target") @Cacheable(cacheNames = "testCache", key = "#root.methodName + #root.method.name + #root.targetClass + #root.target")
public Long rootVars(Object arg1) { public Long rootVars(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", keyGenerator = "customKeyGenerator") @Cacheable(cacheNames = "testCache", keyGenerator = "customKeyGenerator")
public Long customKeyGenerator(Object arg1) { public Long customKeyGenerator(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName") @Cacheable(cacheNames = "testCache", keyGenerator = "unknownBeanName")
public Long unknownCustomKeyGenerator(Object arg1) { public Long unknownCustomKeyGenerator(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager") @Cacheable(cacheNames = "testCache", cacheManager = "customCacheManager")
public Long customCacheManager(Object arg1) { public Long customCacheManager(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName") @Cacheable(cacheNames = "testCache", cacheManager = "unknownBeanName")
public Long unknownCustomCacheManager(Object arg1) { public Long unknownCustomCacheManager(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@CachePut("testCache") @CachePut("testCache")
public Long update(Object arg1) { public Long update(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
...@@ -174,13 +171,13 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -174,13 +171,13 @@ public class DefaultCacheableService implements CacheableService<Long> {
@Override @Override
@Cacheable("testCache") @Cacheable("testCache")
public Long nullValue(Object arg1) { public Long nullValue(Object arg1) {
nullInvocations.incrementAndGet(); this.nullInvocations.incrementAndGet();
return null; return null;
} }
@Override @Override
public Number nullInvocations() { public Number nullInvocations() {
return nullInvocations.get(); return this.nullInvocations.get();
} }
@Override @Override
...@@ -212,25 +209,25 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -212,25 +209,25 @@ public class DefaultCacheableService implements CacheableService<Long> {
@Override @Override
@Caching(cacheable = { @Cacheable("primary"), @Cacheable("secondary") }) @Caching(cacheable = { @Cacheable("primary"), @Cacheable("secondary") })
public Long multiCache(Object arg1) { public Long multiCache(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#p0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") }) @Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames = "secondary", key = "#p0"), @CacheEvict(cacheNames = "primary", key = "#p0 + 'A'") })
public Long multiEvict(Object arg1) { public Long multiEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") }) @Caching(cacheable = { @Cacheable(cacheNames = "primary", key = "#root.methodName") }, evict = { @CacheEvict("secondary") })
public Long multiCacheAndEvict(Object arg1) { public Long multiCacheAndEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
@Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#p0 == 3") }, evict = { @CacheEvict("secondary") }) @Caching(cacheable = { @Cacheable(cacheNames = "primary", condition = "#p0 == 3") }, evict = { @CacheEvict("secondary") })
public Long multiConditionalCacheAndEvict(Object arg1) { public Long multiConditionalCacheAndEvict(Object arg1) {
return counter.getAndIncrement(); return this.counter.getAndIncrement();
} }
@Override @Override
......
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -39,12 +39,17 @@ import org.springframework.context.ConfigurableApplicationContext; ...@@ -39,12 +39,17 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.tests.transaction.CallCountingTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
/** /**
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Juergen Hoeller
*/ */
public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests { public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests {
private final TransactionTemplate txTemplate = new TransactionTemplate(new CallCountingTransactionManager());
private CacheManager jCacheManager; private CacheManager jCacheManager;
...@@ -76,6 +81,26 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests { ...@@ -76,6 +81,26 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests {
public void testCustomCacheManager() { public void testCustomCacheManager() {
} }
@Test
public void testEvictWithTransaction() {
txTemplate.execute(() -> testEvict(this.cs, false));
}
@Test
public void testEvictEarlyWithTransaction() {
txTemplate.execute(() -> testEvictEarly(this.cs));
}
@Test
public void testEvictAllWithTransaction() {
txTemplate.execute(() -> testEvictAll(this.cs, false));
}
@Test
public void testEvictAllEarlyWithTransaction() {
txTemplate.execute(() -> testEvictAllEarly(this.cs));
}
@Configuration @Configuration
@EnableCaching @EnableCaching
...@@ -87,7 +112,9 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests { ...@@ -87,7 +112,9 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests {
@Override @Override
@Bean @Bean
public org.springframework.cache.CacheManager cacheManager() { public org.springframework.cache.CacheManager cacheManager() {
return new JCacheCacheManager(jCacheManager()); JCacheCacheManager cm = new JCacheCacheManager(jCacheManager());
cm.setTransactionAware(true);
return cm;
} }
@Bean @Bean
......
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -36,6 +36,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -36,6 +36,7 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
public static final AtomicLong nullInvocations = new AtomicLong(); public static final AtomicLong nullInvocations = new AtomicLong();
@Override @Override
public Object cache(Object arg1) { public Object cache(Object arg1) {
return this.counter.getAndIncrement(); return this.counter.getAndIncrement();
...@@ -75,8 +76,8 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -75,8 +76,8 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
} }
@Override @Override
@CacheEvict("testCache") @CacheEvict(cacheNames = "testCache", key = "#p0")
public void invalidate(Object arg1) { public void evict(Object arg1, Object arg2) {
} }
@Override @Override
...@@ -85,11 +86,6 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -85,11 +86,6 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
throw new RuntimeException("exception thrown - evict should NOT occur"); throw new RuntimeException("exception thrown - evict should NOT occur");
} }
@Override
@CacheEvict(cacheNames = "testCache", allEntries = true)
public void evictAll(Object arg1) {
}
@Override @Override
@CacheEvict(cacheNames = "testCache", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", beforeInvocation = true)
public void evictEarly(Object arg1) { public void evictEarly(Object arg1) {
...@@ -97,13 +93,13 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -97,13 +93,13 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0") @CacheEvict(cacheNames = "testCache", allEntries = true)
public void evict(Object arg1, Object arg2) { public void evictAll(Object arg1) {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", allEntries = true, beforeInvocation = true)
public void invalidateEarly(Object arg1, Object arg2) { public void evictAllEarly(Object arg1) {
throw new RuntimeException("exception thrown - evict should still occur"); throw new RuntimeException("exception thrown - evict should still occur");
} }
...@@ -238,4 +234,5 @@ public class AnnotatedClassCacheableService implements CacheableService<Object> ...@@ -238,4 +234,5 @@ public class AnnotatedClassCacheableService implements CacheableService<Object>
arg1.setId(Long.MIN_VALUE); arg1.setId(Long.MIN_VALUE);
return arg1; return arg1;
} }
} }
...@@ -37,7 +37,7 @@ public class CacheAdviceNamespaceTests extends AbstractCacheAnnotationTests { ...@@ -37,7 +37,7 @@ public class CacheAdviceNamespaceTests extends AbstractCacheAnnotationTests {
} }
@Test @Test
public void testKeyStrategy() throws Exception { public void testKeyStrategy() {
CacheInterceptor bean = this.ctx.getBean("cacheAdviceClass", CacheInterceptor.class); CacheInterceptor bean = this.ctx.getBean("cacheAdviceClass", CacheInterceptor.class);
assertThat(bean.getKeyGenerator()).isSameAs(this.ctx.getBean("keyGenerator")); assertThat(bean.getKeyGenerator()).isSameAs(this.ctx.getBean("keyGenerator"));
} }
......
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -33,17 +33,15 @@ public interface CacheableService<T> { ...@@ -33,17 +33,15 @@ public interface CacheableService<T> {
T cacheSyncNull(Object arg1); T cacheSyncNull(Object arg1);
void invalidate(Object arg1); void evict(Object arg1, Object arg2);
void evictWithException(Object arg1);
void evictEarly(Object arg1); void evictEarly(Object arg1);
void evictAll(Object arg1); void evictAll(Object arg1);
void evictWithException(Object arg1); void evictAllEarly(Object arg1);
void evict(Object arg1, Object arg2);
void invalidateEarly(Object arg1, Object arg2);
T conditional(int field); T conditional(int field);
......
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -63,8 +63,8 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -63,8 +63,8 @@ public class DefaultCacheableService implements CacheableService<Long> {
} }
@Override @Override
@CacheEvict("testCache") @CacheEvict(cacheNames = "testCache", key = "#p0")
public void invalidate(Object arg1) { public void evict(Object arg1, Object arg2) {
} }
@Override @Override
...@@ -73,11 +73,6 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -73,11 +73,6 @@ public class DefaultCacheableService implements CacheableService<Long> {
throw new RuntimeException("exception thrown - evict should NOT occur"); throw new RuntimeException("exception thrown - evict should NOT occur");
} }
@Override
@CacheEvict(cacheNames = "testCache", allEntries = true)
public void evictAll(Object arg1) {
}
@Override @Override
@CacheEvict(cacheNames = "testCache", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", beforeInvocation = true)
public void evictEarly(Object arg1) { public void evictEarly(Object arg1) {
...@@ -85,13 +80,13 @@ public class DefaultCacheableService implements CacheableService<Long> { ...@@ -85,13 +80,13 @@ public class DefaultCacheableService implements CacheableService<Long> {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0") @CacheEvict(cacheNames = "testCache", allEntries = true)
public void evict(Object arg1, Object arg2) { public void evictAll(Object arg1) {
} }
@Override @Override
@CacheEvict(cacheNames = "testCache", key = "#p0", beforeInvocation = true) @CacheEvict(cacheNames = "testCache", allEntries = true, beforeInvocation = true)
public void invalidateEarly(Object arg1, Object arg2) { public void evictAllEarly(Object arg1) {
throw new RuntimeException("exception thrown - evict should still occur"); throw new RuntimeException("exception thrown - evict should still occur");
} }
......
...@@ -27,12 +27,11 @@ ...@@ -27,12 +27,11 @@
<cache:cacheable method="nullValue" cache="testCache"/> <cache:cacheable method="nullValue" cache="testCache"/>
</cache:caching> </cache:caching>
<cache:caching> <cache:caching>
<cache:cache-evict method="invalidate" cache="testCache"/>
<cache:cache-evict method="evict" key="#p0" cache="testCache"/> <cache:cache-evict method="evict" key="#p0" cache="testCache"/>
<cache:cache-evict method="evictWithException" cache="testCache"/> <cache:cache-evict method="evictWithException" cache="testCache"/>
<cache:cache-evict method="evictEarly" cache="testCache" before-invocation="true"/> <cache:cache-evict method="evictEarly" cache="testCache" before-invocation="true"/>
<cache:cache-evict method="invalidateEarly" key="#p0" cache="testCache" before-invocation="true"/>
<cache:cache-evict method="evictAll" cache="testCache" all-entries="true"/> <cache:cache-evict method="evictAll" cache="testCache" all-entries="true"/>
<cache:cache-evict method="evictAllEarly" cache="testCache" all-entries="true" before-invocation="true"/>
</cache:caching> </cache:caching>
<cache:caching cache="testCache"> <cache:caching cache="testCache">
<cache:cache-put method="update"/> <cache:cache-put method="update"/>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册