zoukankan      html  css  js  c++  java
  • 获取Spring上下文(ApplicationContext)的三种方法

    1.通过WebApplicationUtils工具类获取,使用该方法的必须依赖Servlet容器。 方法如下:

    ApplicationContext ap = WebApplicationUtils.getWebApplicationContext(servletContextParam)

    其中servletContextParam是你需要传入的Servlet容器参数。

    2. 通过ClassPathXmlApplicationContext类获取。

    ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");

    3.创建一个自己的工具类(SpringContextUtil)实现Spring的ApplicationContextAware接口。最后在Spring配置文件中注册你的工具类。配置如下:

    <bean id="springContextUtil" class="com.fubo.utils.spring.SpringContextUtil" lazy-init="false"/>

    SpringContextUtil实现代码如下:

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

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

  • 相关阅读:
    [AST Babel] Babel Template
    [HTML5] Layout Reflow & thrashing
    [Cypress] Combine Custom Cypress Commands into a Single Custom Command
    errno , perror,strerror
    使用RMAN和控制文件备份删除归档日志的SHELL脚本--RED HAT 5 LINUX 64
    Documentation/ABI/testing/sysfs-block.txt
    003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
    How Many Tables
    NTP for Linux
    如何通过预加载器提升网页加载速度
  • 原文地址:https://www.cnblogs.com/skyblue123/p/13194654.html
Copyright © 2011-2022 走看看