spring容器获取bean
public class ApplicationContextSupport implements ApplicationContextAware {
private final static Logger LOGGER = LoggerFactory.getLogger(ApplicationContextSupport.class);
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
context = ctx;
}
public static ApplicationContext getContext() {
return context;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
try {
if (context != null) { return (T) context.getBean(name); }
} catch (Exception e) {
LOGGER.warn(e.getMessage());
}
return null;
}
public static <T> T getBean(Class<T> clz) {
try {
String[] beanNames = context.getBeanNamesForType(clz);
if (beanNames != null && beanNames.length > 0) { return context.getBean(beanNames[0], clz); }
} catch (Exception e) {
LOGGER.warn(e.getMessage());
}
return null;
}
public static <T> T registerBean(String id, Class<T> clz) {
try {
ConfigurableApplicationContext cac = (ConfigurableApplicationContext) context;
DefaultListableBeanFactory dlbf = (DefaultListableBeanFactory) cac.getBeanFactory();
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(clz);
dlbf.registerBeanDefinition(id, bdb.getRawBeanDefinition());
} catch (Exception e) {
LOGGER.warn(e.getMessage());
}
return getBean(id);
}
/**
* 获取当前环境
*
* @return
*/
public static String getActiveProfile(){
return context.getEnvironment().getActiveProfiles()[0];
}
}