package doumeemes.core.utils;
|
|
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());
|
}
|
}
|
|
}
|