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.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * User: jimmey/shantong * DateTime: 13-4-24 ����12:03 */ @ListenerPriority(Priority.LOW) public class AppClassLoaderFactory extends AppChangeAdapter { private static Map<String, AppGroovyClassLoader> appGroovyClassLoaderMap = new ConcurrentHashMap<String, AppGroovyClassLoader>(); public static AppGroovyClassLoader getAppClassLoader(App app) { AppGroovyClassLoader classLoader = appGroovyClassLoaderMap.get(app.getAppKey()); if (classLoader == null) { classLoader = new AppGroovyClassLoader(app); appGroovyClassLoaderMap.put(app.getAppKey(), classLoader); } return classLoader; } /** * ����app��classloader�����ڿ������ճ�ģʽ * * @param app */ public static void reset(App app) { AppGroovyClassLoader classLoader = appGroovyClassLoaderMap.get(app.getAppKey()); classLoader = null;//�Ƿ���Ҫ��ʾ AppGroovyClassLoader newloader = new AppGroovyClassLoader(app); appGroovyClassLoaderMap.put(app.getAppKey(), newloader); } public static GroovyClassLoader getAppBizClassLoader(App app) { return getAppClassLoader(app).getBizClassLoader(); } public static GroovyClassLoader getAppWebClassLoader(App app) { return getAppClassLoader(app).getWebClassLoader(); } /** * Ӧ��ֹͣҲ����classloader * * @param app */ @Override public void stop(App app) { remove(app); } /** * ж��һ��Ӧ�ú����Ե�groovy class ж�� * * @param ap */ @Override public void remove(App ap) { appGroovyClassLoaderMap.remove(ap.getAppKey()); } }