package com.snowcattle.game.common.loader; import com.snowcattle.game.common.constant.Loggers; import org.slf4j.Logger; import java.util.Hashtable; /** * @author jwp * 动态游戏工厂 */ public class DynamicGameClassLoader extends ClassLoader { public static final Logger logger = Loggers.serverLogger; private Hashtable<String, Class> loadedClasses = new Hashtable<String, Class>(); public Class<?> findClass(String className, byte[] b) throws ClassNotFoundException { logger.info("class loader find:" + className); Class<?> classes = defineClass(null, b, 0, b.length); loadedClasses.put(className, classes); return classes; } @Override public synchronized Class loadClass(String className, boolean resolve) throws ClassNotFoundException { logger.info("class loader load:" + className); return super.loadClass(className, resolve); } @Override protected Class<?> findClass(final String className) throws ClassNotFoundException{ if(loadedClasses.containsKey(className)){ return loadedClasses.get(className); } return super.findClass(className); } }