You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
package org.pqh.core.util;
|
|
|
|
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.context.ApplicationContext;
|
|
import org.springframework.context.ApplicationContextAware;
|
|
import org.springframework.context.ConfigurableApplicationContext;
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Created by reborn on 2017/9/19.
|
|
*/
|
|
@Component
|
|
@Lazy(false)
|
|
public class SpringUtil implements ApplicationContextAware,LogManger {
|
|
private static ApplicationContext applicationContext;
|
|
|
|
public static <T>T getBean(Class<T> c){
|
|
return applicationContext.getBean(c);
|
|
}
|
|
|
|
public static <T>T getBean(String beanName){
|
|
return (T) applicationContext.getBean(beanName);
|
|
}
|
|
|
|
@Override
|
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
|
log.info("init applicationContext");
|
|
SpringUtil.applicationContext=applicationContext;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param clazz 注册class
|
|
* @param serviceName 注册别名
|
|
* @param propertyMap 注入属性
|
|
*/
|
|
public static void addBean(Class clazz,String serviceName,Map<String,Object> propertyMap){
|
|
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
|
|
if(propertyMap!=null){
|
|
for(String key:propertyMap.keySet()){
|
|
beanDefinitionBuilder.addPropertyValue(key, propertyMap.get(key));
|
|
}
|
|
}
|
|
registerBean(serviceName, beanDefinitionBuilder.getRawBeanDefinition());
|
|
}
|
|
|
|
/**
|
|
* @desc 向spring容器注册bean
|
|
* @param beanName
|
|
* @param beanDefinition
|
|
*/
|
|
private static void registerBean(String beanName, BeanDefinition beanDefinition) {
|
|
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
|
|
BeanDefinitionRegistry beanDefinitonRegistry = (BeanDefinitionRegistry) configurableApplicationContext
|
|
.getBeanFactory();
|
|
beanDefinitonRegistry.registerBeanDefinition(beanName, beanDefinition);
|
|
}
|
|
}
|
|
|