Ich bin neu in Spring Caching. Ich benutze Spring-Boot-Starter-1.4.0.RELEASE in meinem Maven Pom. Soweit ich die Dokumentation zu verstehen, wenn ich so etwas wie diese nehmen:Mit @Cacheable annotierte Methode wird nicht abgefangen
@Configuration
@EnableCaching
public class TestApplication {
@Bean
public CacheManager cacheManager() {
// configure and return an implementation of Spring's CacheManager SPI
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("default")));
return cacheManager;
}
@Bean
public MyService myService() {
// configure and return a class having @Cacheable methods
return new MyService();
}
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(TestConfiguration.class);
MyService ms = ctx.getBean(MyService.class);
ms.doCacheableOperation(); // calls the underlying method
ms.doCacheableOperation(); // SHOULD just consult the cache
}
}
und habe eine Klasse wie folgt:
public class MyService {
@Cacheable
public String doCacheableOperation() {
System.out.println("======================CALLING EXPENSIVE METHOD=======================");
return "done";
}
}
Wenn die Hauptmethode in Testapplication läuft, um den ersten Anruf zu MyServce # doCacheableOperation sollte auf dem Bildschirm ausgegeben werden, aber die zweite sollte nicht, da das Ergebnis vom ersten Mal zwischengespeichert werden würde. Dies ist jedoch nicht der Fall; Die Ausgabe wird zweimal angezeigt.
Der Konfigurationscode wird von der Javadoc für EnableCaching gehoben: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/cache/annotation/EnableCaching.html
Eine Sache, die mir tut Puzzle, das ist, wenn ich die Instanz von MyService debuggen und inspizieren, es ist nur das rohe Objekt ist in jedem CGLIB nicht umgebrochen Unterklasse usw.
Wie muss ich meine Konfiguration/Vorgehensweise ändern, damit das Ergebnis von MyService # doCacheableOperation zwischengespeichert wird?