| package com.doumee.config.mybatis; | 
|   | 
| import org.springframework.beans.BeansException; | 
| import org.springframework.beans.factory.config.BeanDefinition; | 
| import org.springframework.beans.factory.support.BeanDefinitionBuilder; | 
| import org.springframework.beans.factory.support.BeanDefinitionRegistry; | 
| import org.springframework.beans.factory.support.DefaultListableBeanFactory; | 
| import org.springframework.context.ApplicationContext; | 
| import org.springframework.context.ApplicationContextAware; | 
| import org.springframework.stereotype.Component; | 
|   | 
| /** | 
|  * NOTICE: NEVER USE IT WHEN REGISTERING A SPRING BEAN. | 
|  * | 
|  * @author Guang YANG | 
|  */ | 
| @Component | 
| public class SpringUtils implements ApplicationContextAware { | 
|   | 
|     private static ApplicationContext CTX; | 
|   | 
|     public static ApplicationContext get() { | 
|         return CTX; | 
|     } | 
|   | 
|     @Override | 
|     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { | 
|         CTX = applicationContext; | 
|     } | 
|   | 
|     /** | 
|      * 向容器中动态添加Bean | 
|      * | 
|      * @param ctx | 
|      * @param beanName | 
|      * @param beanClass | 
|      */ | 
|     public static void addBean(ApplicationContext ctx, String beanName, Class beanClass) { | 
|         BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory(); | 
|         BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass); | 
|         BeanDefinition beanDef = beanDefBuilder.getBeanDefinition(); | 
|         if (!beanDefReg.containsBeanDefinition(beanName)) { | 
|             beanDefReg.registerBeanDefinition(beanName, beanDef); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 从容器中移除Bean | 
|      * | 
|      * @param ctx | 
|      * @param beanName | 
|      */ | 
|    public static void removeBean(ApplicationContext ctx, String beanName) { | 
|         BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory) ctx.getAutowireCapableBeanFactory(); | 
|         beanDefReg.getBeanDefinition(beanName); | 
|         beanDefReg.removeBeanDefinition(beanName); | 
|     } | 
|   | 
|     /** | 
|      * 遍历输出所有Bean的信息 | 
|      */ | 
|     static void showAllBeans(ApplicationContext ctx) { | 
|         //遍历 | 
|         for (String name : ctx.getBeanDefinitionNames()) { | 
|             System.out.println("name:" + name + ",class:" + ctx.getBean(name).getClass()); | 
|         } | 
|     } | 
|   | 
| } |