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