/** 基于spring动态加载bean配置 */ public class DynamicBeanReaderImpl implements DynamicBeanReader, ApplicationContextAware { private static final Logger logger = LoggerFactory.getCustomerLog(DynamicBeanReaderImpl.class, "spring_dynamicBean"); private ConfigurableApplicationContext applicationContext = null; private XmlBeanDefinitionReader beanDefinitionReader; /*初始化方法*/ public void init() { beanDefinitionReader = new XmlBeanDefinitionReader((BeanDefinitionRegistry) applicationContext.getBeanFactory()); beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(applicationContext)); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = (ConfigurableApplicationContext) applicationContext; } @Override public void loadBean(DynamicBean dynamicBean) { long startTime = System.currentTimeMillis(); String beanName = dynamicBean.getBeanName(); if (applicationContext.containsBean(beanName)) { logger.warn(beanName, "bean【{}】已经加载!"); // TODO 已经存在旧的bean,须不须要动态更新 return; } beanDefinitionReader.loadBeanDefinitions(new DynamicResource(dynamicBean)); logger.info( beanName, String.valueOf(System.currentTimeMillis() - startTime), "初始化bean【{}】耗时{}毫秒."); } }