mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
42 lines
1.1 KiB
Plaintext
42 lines
1.1 KiB
Plaintext
package com.blogspot.miguelinlas3.aspectj.cache;
|
|
|
|
import java.util.Map;
|
|
import java.util.WeakHashMap;
|
|
|
|
import org.aspectj.lang.JoinPoint;
|
|
|
|
import com.blogspot.miguelinlas3.aspectj.cache.marker.Cachable;
|
|
|
|
/**
|
|
* This simple aspect simulates the behaviour of a very simple cache
|
|
*
|
|
* @author migue
|
|
*
|
|
*/
|
|
public aspect CacheAspect {
|
|
|
|
public pointcut cache(Cachable cachable): execution(@Cachable * * (..)) && @annotation(cachable);
|
|
|
|
Object around(Cachable cachable): cache(cachable){
|
|
|
|
String evaluatedKey = this.evaluateKey(cachable.scriptKey(), thisJoinPoint);
|
|
|
|
if(cache.containsKey(evaluatedKey)){
|
|
System.out.println("Cache hit for key " + evaluatedKey);
|
|
return this.cache.get(evaluatedKey);
|
|
}
|
|
|
|
System.out.println("Cache miss for key " + evaluatedKey);
|
|
Object value = proceed(cachable);
|
|
cache.put(evaluatedKey, value);
|
|
return value;
|
|
}
|
|
|
|
protected String evaluateKey(String key, JoinPoint joinPoint) {
|
|
// TODO add some smart staff to allow simple scripting in @Cachable annotation
|
|
return key;
|
|
}
|
|
|
|
protected Map<String, Object> cache = new WeakHashMap<String, Object>();
|
|
}
|