package marubinotto.util; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.UnhandledException; public class ThreadLocalCache extends ThreadLocal<Map<String, Object>> { public static ThreadLocalCache INSTANCE = new ThreadLocalCache(); private ThreadLocalCache() { } protected synchronized Map<String, Object> initialValue() { return new HashMap<String, Object>(); } @SuppressWarnings("unchecked") public static <T> T get(Class<T> target) { Assert.Arg.notNull(target, "target"); Map<String, Object> cache = INSTANCE.get(); T object = (T)cache.get(target.getName()); if (object == null) { try { object = target.newInstance(); } catch (Exception e) { throw new UnhandledException(e); } cache.put(target.getName(), object); } return object; } }