方法一:主要就是通过servletContext获取Spring容器
第一步:在web.xml定义request的上下文
第二步:通过request上下文得到servletContext,从而得到applicationContext
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
将上面代码封装成工具类public class ApplicationContextUtils {
private static ApplicationContextapplicationContext;
public static ApplicationContext getApplicationContext(){
if(applicationContext ==null){
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
}
return applicationContext;
}
}
方法二:通过实现ApplicationContextAware接口获取步骤一:将代码封装为工具类
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext acx) throws BeansException {
ApplicationContextHolder.applicationContext = acx;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanName) {
return (T) ApplicationContextHolder.applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> clazz) {
return (T) ApplicationContextHolder.applicationContext.getBean(clazz);
}
}
步骤二:在Spring的配置文件中也就是applicationContext.xml中配置bean
<bean id="applicationContextHolder" class="com.sheshu.base.util.ApplicationContextHolder"></bean>