Skip to content

Spring AOP & Ehcache

2009 September 25
by Haf

Caching ist ja bekanntlich eine Querschnitts-Anforderung (cross cutting concern), was man eigentlich nicht direkt in die Business-Logik integrieren möchte/sollte.
Hier bietet es sich an, die Cache-Funktionalität mittels AOP (Aspektorientierte Programmierung) zu realisieren.
Dieser Beitrag erklärt das exemplarisch realisieren der Cache-Funktionalität mittels Spring AOP und Ehcache.

Einführung
Vorweg. Es gibt natürlich bei den springmodules ein Cache-Modul. Dieses wird, wenn überhaupt, nur sehr langsam weiterentwickelt. Das neue Spring Extensions Projekt beinhaltet leider kein Cache-Modul. Hinzu kommen noch fehlende Funktionalitäten wie z.B. das Löschen von nur einem Objekt aus dem Cache.
Falls man jedoch doch Springmodules Cache nutzen will, kann man sich mein altes Beispiel anschauen.

Technologie
In der Lösung wird nur Spring AOP und Ehcache direkt verwendet. Bei der AOP Implementierung wird nicht AspectJ verwendet um die Anzahl der abhängigen Bibliotheken gering zu halten. Dies ist auch möglich, da die benötigte Funktionalität durch Spring AOP bereitgestellt wird.
Mittels der Spring-Klasse EhCacheManagerFactoryBean wird der Ehcache integriert.

Bibliotheken
In diesem Fall braucht man mindestens (und die entsprechende Abhängigkeiten):

  • spring 2.5.6
  • ehcache

XML Konfiguration
Die XML Konfiguration für Spring sieht wie folgt aus:

Spring AOP ist proxy-basiert. Hierfür wird deswegen ein ProxyFactoryBean definiert, was den Advisor (coAdvisor) auf ein bestimmtes Bean einsetzt, somit entsteht dann eine neue Proxy-Klasse (coServiceProxy).

Mit RegexpMethodPointcutAdvisor kann definiert werden, welche Methoden beobachtet werden. In unserem Fall alle update und get Methoden.

Der Advice bzw. Interceptor (coInterceptor), welcher die Querschnitts-Funktionalität beinhaltet, kriegt eine Referenz auf den CacheManager (hier: cacheManager). Mit dieser Referenz kann beim Methoden-Aufruf vorher im Cache geprüft werden, ob die Antwort schon bekannt ist, wenn nicht, wird die Methode weiter ausgeführt und das Ergebnis (Rückgabewert) dann im Cache gespeichert.

Mit wenig Konfiguration und Programmierung kann man sehr einfach Cache-Funktionalität einfügen, ohne die Business Logik zu verändern.

Links:
– Spring AOP: http://static.springsource.org/spring/docs/2.5.x/reference/aop-api.html
– Ehcache: http://ehcache.org/
– Spring 2.5.x API: http://static.springsource.org/spring/docs/2.5.x/api/index.html

Share it!
  •  
  •  
  •  
  •  
  •  
  •  
No comments yet

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