package com.taobao.easyweb.core.groovy.groovyobject; import com.taobao.easyweb.core.app.App; import com.taobao.easyweb.core.app.change.AppChangeAdapter; import com.taobao.easyweb.core.app.change.ListenerPriority; import com.taobao.easyweb.core.app.change.Priority; import groovy.lang.GroovyClassLoader; import java.io.File; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * User: jimmey/shantong * DateTime: 13-4-24 ����12:12 * <p/> * CacheDO�Ļ�������������classloader���л��洦�� */ @ListenerPriority(Priority.HIGH) public class Cacher extends AppChangeAdapter { private static Map<GroovyClassLoader, Map<String, CacheDO>> cacheDOMap = new ConcurrentHashMap<GroovyClassLoader, Map<String, CacheDO>>(); public static void put(GroovyClassLoader classLoader, File file, CacheDO cacheDO) { getClassloaderCache(classLoader).put(file.getAbsolutePath(), cacheDO); } public static CacheDO get(GroovyClassLoader classLoader, File file) { CacheDO cacheDO = getClassloaderCache(classLoader).get(file.getAbsolutePath()); if (cacheDO == null) { return null; } return (cacheDO.getLastModified() == file.lastModified()) ? cacheDO : null; } private static Map<String, CacheDO> getClassloaderCache(GroovyClassLoader classLoader) { Map<String, CacheDO> map = cacheDOMap.get(classLoader); if (map == null) { map = new ConcurrentHashMap<String, CacheDO>(); cacheDOMap.put(classLoader, map); } return map; } public static void clean(GroovyClassLoader classLoader) { cacheDOMap.remove(classLoader); } @Override public void init() { // } @Override public void stop(App app) { GroovyClassLoader classLoader = AppClassLoaderFactory.getAppBizClassLoader(app); cacheDOMap.remove(classLoader); } @Override public void start(App app) { } }