io.github.linpeilie.mapstruct.SpringContextUtils Maven / Gradle / Ivy
The newest version!
package io.github.linpeilie.mapstruct;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
public class SpringContextUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
private static ConfigurableListableBeanFactory beanFactory;
private static ApplicationContext applicationContext;
public SpringContextUtils() {
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringContextUtils.beanFactory = beanFactory;
}
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtils.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static ListableBeanFactory getBeanFactory() {
ListableBeanFactory factory = null == beanFactory ? applicationContext : beanFactory;
if (null == factory) {
throw new RuntimeException("No ConfigurableListableBeanFactory or ApplicationContext injected, maybe not in the Spring environment?");
} else {
return (ListableBeanFactory)factory;
}
}
public static ConfigurableListableBeanFactory getConfigurableBeanFactory() {
ConfigurableListableBeanFactory factory;
if (null != beanFactory) {
factory = beanFactory;
} else {
if (!(applicationContext instanceof ConfigurableApplicationContext)) {
throw new RuntimeException("No ConfigurableListableBeanFactory from context!");
}
factory = ((ConfigurableApplicationContext)applicationContext).getBeanFactory();
}
return factory;
}
public static T getBean(Class clazz) {
return getBeanFactory().getBean(clazz);
}
public static T getBean(String name, Class clazz) {
try {
return getBean(clazz);
} catch (NoUniqueBeanDefinitionException e) {
return getBeanFactory().getBean(name, clazz);
}
}
}