- Spring容器会检测容器中的所有Bean
- 某个Bean实现了ApplicationContextAware接口
- Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法
- 调用该方法时,会将容器本身作为参数传给该方法
实现类:
/**
* 直接通过Spring 上下文获取SpringBean,用于多线程环境
*/
public class SpringBeanUtils implements ApplicationContextAware{
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringBeanUtils.applicationContext = applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBeanByName(String beanName) {
if (applicationContext == null){
return null;
}
return (T)applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> type) {
return applicationContext.getBean(type);
}
}
spring-context.xml 的配置:
<!-- Spring手动获取Bean工具类,需要配置在XML文件才能自动获取上下文,Spring4需要去除懒加载 -->
<bean id="springBeanUtils" class="com.em.wf.common.util.SpringBeanUtils" lazy-init="false"/>