• 获取spring上下文


    前言

      spring上下文是spring容器抽象的一种实现。将你需spring帮你管理的对象放入容器的一种对象,ApplicationContext是一维护Bean定义以及对象之间协作关第的高级接口。

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

    一)、通过WebApplicationUtils工具类获取。

      WebApplicationUtils类是在Spring框架基础包spring-web-3.2.0. RELEASE.jar中的类。使用该方法的必须依赖Servlet容器。 使用方法如下: 

    // Spring中获取ServletContext对象,普通类中可以这样获取
    ServletContext sc = ContextLoader.getCurrentWebApplicationContext().getServletContext();
    // servlet中可以这样获取,方法比较多
    ServletContext sc = request.getServletContext():
    ServletContext sc = servletConfig.getServletContext();  //servletConfig可以在servlet的init(ServletConfig config)方法中获取得到
     
    /* 需要传入一个参数ServletContext对象, 获取方法在上面 */
    // 这种方法 获取失败时抛出异常
    ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
    // 这种方法 获取失败时返回null
    ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sc);

    二)、通过加载 配置文件注解配置类 获取

    ① ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式; 这种测试常用

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

    ② FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;

    ③ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

    ④AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;

    ⑤ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;

     三)、创建一个自己的工具类(SpringContextHolder)实现Spring的ApplicationContextAware接口。

     ① 在配置文件中注册工具类

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

    ② 工具类

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    /**
     * 实现spring context的管理
     */
    @Component("applicationContextHelper")
    public class ApplicationContextHelper implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext context) throws BeansException {
            applicationContext = context;
        }
      //根据类型获取bean
        public static <T> T popBean(Class<T> clazz){
            checkApplicationContext();
            return applicationContext.getBean(clazz);
        }
       //根据名称获取bean
         public static <T> T popBean(String name){
            checkApplicationContext();
            return applicationContext.getBean(clazz);
        }
       //根据名称和类型获取bean
        public static <T> T popBean(String name, Class<T> clazz){
            checkApplicationContext();
            return applicationContext.getBean(name, clazz);
        }
    
        //检查applicationContext是否为空
        private static void checkApplicationContext(){
            if (applicationContext == null) {
                throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
            }
        }
    }
  • 相关阅读:
    paip. everything exe 文件不能启动的解决
    paip.输入法编程词频顺序order by py
    paip.最新的c++ qt5.1.1环境搭建跟hello world
    paip.mysql 5.6 数据库 占用 内存 过多 的 解决方案
    paip.win32的internet扩展已停止工作解决大法
    paip.输入法编程删除双字词简拼
    paip.输入法编程词频调整单字优先编码发音一致优先的问题跟调整
    paip.输入法编程带ord gudin去重复
    paip.php eclipse output echo 乱码
    paip.svn使用最佳实践
  • 原文地址:https://www.cnblogs.com/FondWang/p/12036918.html
Copyright © 2020-2023  润新知