获取Spring上下文(ApplicationContext)的三种方法

当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述获取Spring上下文(ApplicationContext)的三种方法相关的知识,希望能为你提供帮助。
1.通过WebApplicationUtils工具类获取,使用该方法的必须依赖Servlet容器。 方法如下:

ApplicationContext ap = WebApplicationUtils.getWebApplicationContext(servletContextParam)

其中servletContextParam是你需要传入的Servlet容器参数。
 
2. 通过ClassPathXmlApplicationContext类获取。
ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");

 
【获取Spring上下文(ApplicationContext)的三种方法】3.创建一个自己的工具类(SpringContextUtil)实现Spring的ApplicationContextAware接口。最后在Spring配置文件中注册你的工具类。配置如下:
< bean id="springContextUtil" class="com.fubo.utils.spring.SpringContextUtil" lazy-init="false"/>

SpringContextUtil实现代码如下:
1 public class SpringContextUtil implements ApplicationContextAware { 2private static ApplicationContext applicationContext; 3 4/** 5* 实现ApplicationContextAware接口的setApplicationContext注入函数, 将其存入静态变量. 6*/ 7public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 8SpringContextUtil.applicationContext = applicationContext; 9} 10/** 11* 取得存储在静态变量中的ApplicationContext. 12*/ 13public static ApplicationContext getApplicationContext() { 14checkApplicationContext(); 15return applicationContext; 16} 17 18/** 19* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 20*/ 21@SuppressWarnings("unchecked") 22public static < T> T getBean(String beanName){ 23checkApplicationContext(); 24return (T) applicationContext.getBean(beanName); 25} 26/** 27* 清除applicationContext静态变量. 28*/ 29public static void cleanApplicationContext(){ 30applicationContext = null; 31} 32private static void checkApplicationContext(){ 33if (applicationContext == null){ 34throw new IllegalStateException("applicationContext未注入,请在daos.xml中定义SpringContextUtil"); 35} 36} 37 38 }

 
总结:方式1要依赖Servlet容器,方式2实际只适合测试使用,方式1,2都有明显弊端。建议使用方式3。

    推荐阅读