package com.towel.cache;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
import com.towel.el.FieldResolver;
import com.towel.el.annotation.AnnotationResolver;
public class FormatterCache {
private static final Map<Class<?>, Map<String, Reference<FieldResolver>>> RESOLVERS = new WeakHashMap<Class<?>, Map<String, Reference<FieldResolver>>>();
private FormatterCache() {
}
public static FieldResolver getResolver(Class<?> clazz, String resolverName) {
if (clazz == null)
throw new IllegalArgumentException();
Map<String, Reference<FieldResolver>> clazzMap = RESOLVERS.get(clazz);
if (clazzMap == null) {
clazzMap = new WeakHashMap<String, Reference<FieldResolver>>();
RESOLVERS.put(clazz, clazzMap);
}
WeakReference<FieldResolver> resolver = (WeakReference<FieldResolver>) clazzMap
.get(resolverName);
if (resolver == null) {
resolver = new WeakReference<FieldResolver>(new AnnotationResolver(
clazz).resolveSingle(resolverName));
clazzMap.put(resolverName, resolver);
}
FieldResolver result = resolver.get();
if (result == null) {
resolver = new WeakReference<FieldResolver>(new AnnotationResolver(
clazz).resolveSingle(resolverName));
clazzMap.put(resolverName, resolver);
}
return result;
}
}