获取Spring的上下文环境ApplicationContext的方式

来源:互联网 发布:custom.js插件 编辑:程序博客网 时间:2024/05/16 16:07

Web项目中发现有人如此获得Spring的上下环境:

 

public class SpringUtil {

       public static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 
       public static Object getBean(String serviceName){
             return context.getBean(serviceName);
       }
}

 

 

在web项目中这种方式非常不可取!!!

分析:

首先,主要意图就是获得Spring上下文;

其次,有了Spring上下文,希望通过getBean()方法获得Spring管理的Bean的对象;

最后,为了方便调用,把上下文定义为static变量或者getBean方法定义为static方法;

 

但是,在web项目中,系统一旦启动,web服务器会初始化Spring的上下文的,我们可以很优雅的获得Spring的ApplicationContext对象。

如果使用

new ClassPathXmlApplicationContext("applicationContext.xml");
相当于重新初始化一遍!!!!

也就是说,重复做启动时候的初始化工作,第一次执行该类的时候会非常耗时!!!!!

 

正确的做法是:

 

@Component
public class SpringContextUtil implements ApplicationContextAware {

         private static ApplicationContext applicationContext; // Spring应用上下文环境

         /*

          * 实现了ApplicationContextAware 接口,必须实现该方法;

          *通过传递applicationContext参数初始化成员变量applicationContext

          */

         public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
               SpringContextUtil.applicationContext = applicationContext;
         }

 

         public static ApplicationContext getApplicationContext() {
                return applicationContext;
         }


          @SuppressWarnings("unchecked")
          public static <T> T getBean(String name) throws BeansException {
                     return (T) applicationContext.getBean(name);
           }

}

 

注意:这个地方使用了Spring的注解@Component,如果不是使用annotation的方式,而是使用xml的方式管理Bean,记得写入配置文件

<bean id="springContextUtil" class="com.ecdatainfo.util.SpringContextUtil" singleton="true" />

 

其实

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
这种方式获取Sping上下文环境,最主要是在测试环境中使用,比如写一个测试类,系统不启动的情况下手动初始化Spring上下文再获取对象!
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 醋酸奥曲肽 甲酯 醋酸镍 伊士曼醋酸丁酸纤维素 醋酸铁 醋酸锰厂家 醋酸镧 醋酸去氨加压素注射液 醋酸厂家 醋酸乙脂 醋酸和冰醋酸的区别 醋酸白试验怎么做 醋酸价格 注射用醋酸亮丙瑞林微球价格 醋酸亮丙瑞林价格 醋酸铑 醋酸地塞米松片价格 醋酸镱 醋酸去氨加压素片厂家 醋酸白试 醋酸丁酯 价格 醋酸板材 醋酸实验 醋酸白现象 三氯醋酸 醋酸白 食醋 盐酸四环素醋酸可的松眼膏 醋酸钯 价格 醋酸氯己定栓 醋酸泼尼松龙 醋酸白实验自己怎么做 食用醋酸 醋酸去氨加压素 自己怎么做醋酸白试验 醋酸钙片 价格 醋酸钕 醋酸镨 醋酸面料 醋酸铽 醋酸镝 丙二醇甲醚醋酸酯 pma