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