SpringContextHolder 容器持有工具,有两个作用:
1、持有Spring的容器 ApplicationContext,可在任何地方取出ApplicaitonContext ,获取Service层、Dao层的bean对象实例。
2、获取Spring mvc的容器 WebApplicationContext (依赖于request),从容器中取出Controller的实例对象。
方法 | 说明 | 示例 |
---|---|---|
public static ApplicationContext getApplicationContext() |
获取Spring的容器 ApplicationContext 这是父容器,可以纯java项目环境(非web)下就可获取到ApplicationContext容器 |
ApplicationContext c= SpringContextHolder.getApplicationContext(); |
public static <T> T getBean(String name ) |
从ApplicationContext中取得Bean |
|
public static <T> T getBean(Class<T> requiredType ) |
从ApplicationContext中取得Bean (最常使用的方法) |
private SystemService systemService; systemService = SpringContextHolder.getBean(SystemService.class); systemService.xxx(); |
public static WebApplicationContext getWebApplicationContext(HttpServletRequest request ) |
获取Spring mvc的容器 WebApplicationContext 使用SpringContextHolder,如何从容器中取出Controller的实例对象? 先获取WebApplicationContext,再从中取Controller类型的bean 获取Spring mvc的容器 WebApplicationContext (依赖于request) 这是子容器,一定要有web项目环境下才会有WebApplicationContext容器,才能成功的获取 Spring mvc DispatcherServlet容器,允许有多个,是取“当前request”中的容器。 作用:可从WebApplicationContext容器中取Controller类型的bean |
HttpServletRequest request; public WebApplicationContext c= SpringContextHolder.getWebApplicationContext(request); |
public static WebApplicationContext getCurrentWebApplicationContext() |
获取Spring mvc容器的当前的 WebApplicationContext (不依赖于request) |
|
public static ServletContext getServletContext() | 获取ServletContext |
补充,可直接注入
@Autowired
|
补充材料:
要Spring工程中,如何获取Spring的容器
有以下几种方法
方法一:
实现ApplicationContextAware接口,Spring初始化时,会通过该方法将ApplicationContext对象注入。
方法二:
实现ApplicationListener接口,Spring初始化完成时,会有事件通知,可取得一个ApplicationContext,多个WebApplicationContext
方法三:
WebApplicationContext web=RequestContextUtils.findWebApplicationContext(request);
WebApplicationContext web=RequestContextUtils.getWebApplicationContext(request);
WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
方法四:
//下在的方法取的是ApplicationContext
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();