package cn.org.rapid_framework.struts; import java.util.Collections; import java.util.Map; import java.util.WeakHashMap; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.config.impl.ModuleConfigImpl; import org.apache.commons.lang.StringUtils; /** * 动态的ModuleConfig,将name尝试作为classname装载以创建formBean配置 * @author badqiu(badqiu@gmail.com) */ public class DynamicModuleConfig extends ModuleConfigImpl implements ModuleConfig { Map invalidClassName = Collections.synchronizedMap(new WeakHashMap()); public DynamicModuleConfig() { super(); } public DynamicModuleConfig(String prefix) { super(prefix); } public FormBeanConfig findFormBeanConfig(String name) { FormBeanConfig result = super.findFormBeanConfig(name); if(result == null) { addFormBeanConfigByClassName(name); return super.findFormBeanConfig(name); } return result; } void addFormBeanConfigByClassName(String className) { if(!isValidClassName(className)) { return; } defreeze(); FormBeanConfig formBeanConfig = new FormBeanConfig(); formBeanConfig.setName(className); formBeanConfig.setType(className); addFormBeanConfig(formBeanConfig); } boolean isValidClassName(String clazzName) { if(invalidClassName.containsKey(clazzName)) { return false; } boolean isValidClassName = isValidClassName0(clazzName); int MAX_CACHE_SIZE = 1000; if(!isValidClassName && invalidClassName.size() < MAX_CACHE_SIZE) { invalidClassName.put(clazzName, null); } return isValidClassName; } boolean isValidClassName0(String clazzName) { try { if(StringUtils.isNotBlank(clazzName)){ Class.forName(clazzName).newInstance(); return true; } }catch(Exception e) { } return false; } public void defreeze() { this.configured = false; } }