package com.alibaba.ttl.classloader; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; //c public class TtlClassCache { private Map> classCacheMap = new ConcurrentHashMap>(); public T loadClassByName(ClassLoader paramClassLoader, String className) { Map classLoaderKeyAndClassValueMap = (Map) this.classCacheMap.get(className); if (classLoaderKeyAndClassValueMap != null) { if (classLoaderKeyAndClassValueMap.containsKey(paramClassLoader)) { return (T) classLoaderKeyAndClassValueMap.get(paramClassLoader); } ClassLoader parentClassLoader = paramClassLoader == null ? null : paramClassLoader.getParent(); while ((parentClassLoader != null) && (!parentClassLoader.getClass().equals(ClassLoader.class))) { if (classLoaderKeyAndClassValueMap.containsKey(parentClassLoader)) { return (T) classLoaderKeyAndClassValueMap.get(parentClassLoader); } if (parentClassLoader.equals(paramClassLoader.getParent())) { break; } parentClassLoader = paramClassLoader.getParent(); } } return null; } public void setClazzLoaderMap(ClassLoader paramClassLoader, String className, T clazz) { if (!this.classCacheMap.containsKey(className)) { this.classCacheMap.put(className, new HashMap()); } ((Map) this.classCacheMap.get(className)).put(paramClassLoader, clazz); } }