工具类 SpringContextUtil
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringContextUtil.applicationContext == null){
SpringContextUtil.applicationContext = applicationContext;
}
}
public static Object getBean(String name){
return applicationContext.getBean(name);
}
/**
* 通过类型获取上下文中的bean
* @param requiredType
* @return
*/
public static Object getBean(Class<?> requiredType){
return applicationContext.getBean(requiredType);
}
/**
* 动态注入bean
* @param requiredType 注入类
* @param beanName bean名称
* @return 注入实例
*/
public static Object registerBean(Class<?> requiredType,String beanName){
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
//获取BeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory();
//创建bean信息.
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(requiredType);
//动态注册bean.
defaultListableBeanFactory.registerBeanDefinition(beanName, beanDefinitionBuilder.getBeanDefinition());
//获取动态注册的bean.
return configurableApplicationContext.getBean(requiredType);
}
public static void removeBean(String beanName){
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
//获取BeanFactory
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory();
defaultListableBeanFactory.removeBeanDefinition(beanName);
}
}
然后在XXXApplication启动类中加入:
@Bean
public SpringContextUtil springContextUtil(){
return new SpringContextUtil();
}
完整
@SpringBootApplication
public class XXXApplication {
@Bean
public SpringContextUtil springContextUtil(){
return new SpringContextUtil();
}
public static void main(String[] args) {
SpringApplication.run(DemoRabbitmqApplication.class, args);
}
}