package com.dy.common.springUtil;
|
|
import org.springframework.beans.BeansException;
|
import org.springframework.beans.MutablePropertyValues;
|
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Map;
|
|
/**
|
* 获取Springboot上下文,并通过上下文可以获取配置文件中的配置参数。
|
* SpringBoot启动时,发现本类注解了@Component,会加载本类并实例化,
|
* 实例化时发现本类实现了接口ApplicationContextAware,则会调用
|
* setApplicationContext方法设置Spring上下文对象
|
*/
|
@Component
|
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;
|
}
|
}
|
|
//获取applicationContext
|
public static ApplicationContext getApplicationContext() {
|
return applicationContext;
|
}
|
|
//通过name获取 Bean.
|
public static Object getBean(String name) {
|
return getApplicationContext().getBean(name);
|
}
|
|
//通过class获取Bean.
|
public static <T> T getBean(Class<T> clazz) {
|
return getApplicationContext().getBean(clazz);
|
}
|
|
/**
|
* 同步方法注册bean到ApplicationContext中
|
*
|
* @param beanName
|
* @param clazz
|
* @param original bean的属性值
|
*/
|
public static synchronized void setBean(String beanName, Class<?> clazz, Map<String,Object> original) {
|
//checkApplicationContext();
|
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
|
if(beanFactory.containsBean(beanName)){
|
return;
|
}
|
//BeanDefinition beanDefinition = new RootBeanDefinition(clazz);
|
GenericBeanDefinition definition = new GenericBeanDefinition();
|
//类class
|
definition.setBeanClass(clazz);
|
//属性赋值
|
definition.setPropertyValues(new MutablePropertyValues(original));
|
//注册到spring上下文
|
beanFactory.registerBeanDefinition(beanName, definition);
|
}
|
|
}
|