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()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |