Skip to content

Cache method results with Ehcache and Spring

2009 April 7
tags: ,
by Haf

Caching ist eins der Aspekte welches man nicht unbedingt direkt in der Businesslogik verankern möchte. Hierzu empfehlt es sich eine AOP-Lösung. Mit AOP kann die Funktionalität einer Cache-Realisierung genutzt werden. Eins der populärsten Cache-Provider ist Ehcache.

In dem Umfeld von Spring kann man Ehcache folgendermaßen integrieren:

Man nutzt das aus dem nicht mehr gewarteten spring-modules-Projekt das cache-Modul. Ja, spring-modules wird durch Spring-Extensions abgelöst, jedoch werden nicht alle Projekte übernommen. D.h. manche Unterprojekte (wohl auch Cache) werden nicht nach Spring-Extensions übernommen. Wo da der Sinn liegt, ist wohl nur den Betreibern klar.

Die aktuelle Version 0.9 findet man auch schon seit Monaten in keinem Maven Repository. Da bleibt nichts anderes übrig, als sich die Bibliothek (spring-modules-cache.jar) selbst in das lokale Repository zu installieren [1]

Für die Abhängigkeit: spring-modules-cache benötigt oro-2.0.8.

Um ein Bean mit Cache-Funktionalität zu erweitern, stellt spring-modules-cache z.B. CacheProxyFactoryBean zur Verfügung um Advices für das Hinzufügen von Objekten (caching advice) und Löschen von Objekte (flushing advice) aus dem Cache bereitzustellen.

Wie man in der Konfiguration sehen kann, werden nur die Methoden getCodes* in dem Bean fService ge-cached. Mit dem Qualifier fMain kann man beim Autowiring nun das richtige Bean injizieren, denn durch den CacheProxyFactoryBean gibt es zwei Beans vom gleichen Typ.

Mit wenig Konfiguration hat man jetzt in Spring Caching eingeführt. Dabei wurde der Source-Code gar nicht angefasst – wenn man vom dem nun notwendigen @Qualifier absieht.

Links:
[1] Maven FAQ: Install 3th party library
[2] Spring-Modules: Cache

Share it!
  •  
  •  
  •  
  •  
  •  
  •  
One Response leave one →

Trackbacks and Pingbacks

  1. Spring AOP & Ehcache | Information Centre

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS