精华内容
下载资源
问答
  • 如何获取Spring上下文环境

    千次阅读 2009-11-12 10:26:00
    当今最流行的技术无非就是:SSH (Struts+Spring+...用这种方式后,当我们需要Spring上下文无法获取,为了解决这个问题,可以在web.xml中加入Spring的监听器: org.springframework.web.context.ContextLoaderListener 

     当今最流行的技术无非就是:SSH (Struts+Spring+Hibernatge),Struts与Spring集成的方式一般是通过PlugIn加载Spring.用这种方式后,当我们需要Spring上下文时无法获取,为了解决这个问题,可以在web.xml中加入Spring的监听器:  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener> 而Spring与Struts的集成仍然用PlugIn的方式,由此可以在Servlet环境中获取Spring上下文.

    ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletConfig().getServletContext());



    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kgd1120/archive/2008/04/29/2341206.aspx

     

     

     

    Spring在Web中是如何载入相关的上下文环境

     在web.xml设置监听器:org.springframework.web.context. ContextLoaderListener
     <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
     </listener>
     
     在此类(ContextLoaderListener )中有如下方法: 
     public void contextInitialized(ServletContextEvent event) {
      this.contextLoader = createContextLoader();
      this.contextLoader.initWebApplicationContext(event.getServletContext());
     }
     
     org.springframework.web.context.ContextLoader
     在此类中有如下变量: public static final String CONTEXT_CLASS_PARAM = "contextClass";
        public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";


     如下方法:initWebApplicationContext,createWebApplicationContext
     第一个方法调用了第二个方法,第二个方法则通过如下代码初始为了一个上下文环境
     String configLocation = servletContext.getInitParameter(CONFIG_LOCATION_PARAM);
     
     注:另外一点如下的DispatcherServlet设置会自动加载petstore-servlet.xml环境,原理我查了半天我也不知道怎么搞的.
     <servlet>
      <servlet-name>petstore</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>2</load-on-startup>
     </servlet>

     

     

    <body>
    <%
    /**
    application = pageContext.getServletContext();
    application 是 ServletContext的一个实例!
    getServletContext
    public abstract ServletContext getServletContext()The ServletContext instance.

    Returns:
    the ServletContext for this PageContext
    */
    int num1=1;
    Object obj=application.getAttribute("num");//第一次运行这个“application.jsp”这里为什么就没空指针异常?
    if(obj==null)
    {
    application.setAttribute("num",String.valueOf(num1));
    }
    else
    {
    num1=Integer.parseInt(obj.toString());
    num1+=1;
    application.setAttribute("num",String.valueOf(num1));
    }
    %>
    欢迎光临本网页,你是第<%=num1%>位访客!
    </body>

    展开全文
  • 问题 springboot 整合 storm 无法使用注解获取 Ioc 里的 bean,获取不到 spring 上下文 applicationContext 待整理,参考 1、 https://blog.csdn.net/iteye_14294/article/details/82278852 2、 ...

    问题

    springboot 整合 storm 无法使用注解获取 Ioc 里的 bean,获取不到 spring 上下文 applicationContext

    待整理,参考

    1、
    https://blog.csdn.net/iteye_14294/article/details/82278852
    2、
    https://www.cnblogs.com/gouyg/p/storm-springboot.html
    3、
    https://www.jianshu.com/p/19ee4cce176e

    查找相关资料,搜索

    springboot 结合 storm 怎么注入 bean

    展开全文
  • 当今最流行的技术无非就是:SSH (Struts+Spring+...用这种方式后,当我们需要Spring上下文无法获取,为了解决这个问题,可以在web.xml中加入Spring的监听器: org.springframework.web.context.ContextLoaderListener 

    当今最流行的技术无非就是:SSH (Struts+Spring+Hibernatge),Struts与Spring集成的方式一般是通过PlugIn加载Spring.用这种方式后,当我们需要Spring上下文时无法获取,为了解决这个问题,可以在web.xml中加入Spring的监听器:  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener> 而Spring与Struts的集成仍然用PlugIn的方式,由此可以在Servlet环境中获取Spring上下文.

    ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletConfig().getServletContext());

    展开全文
  • 涉及到的类包括: 1. ITestService.java 2. TestServiceImp.java 3. autoWiringService.java 以及Spring配置文件: 4.autoWiring.xml 对应的源码为: ...猜测是否是无法读取xml文件?还是哪里没有配置好?
  • 在很多情况,我们需要先获取spring容器上下文,即webApplicationContext,然后通过webApplicationContext来获取其中的bean。典型的情况是,我想在一个并未委托给spring容器管理的对象里,去引用一个spring容器管理的...

       在很多情况,我们需要先获取spring容器上下文,即webApplicationContext,然后通过webApplicationContext来获取其中的bean。典型的情况是,我想在一个并未委托给spring容器管理的对象里,去引用一个spring容器管理的对象,此时,@Resource注解是无法发挥作用的。此时必须使用webApplicationContext.getBean("beanName")才能从容器中取到这个java对象,不然我们就只能自己去new了。

      方法1::ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

      经验证是可行的,但是有个问题,就是执行这句代码的时候很耗时。本人猜测这句代码会重新new一个容器对象,相当于重新载入了一次applicationContext.xml里面配置的类,重新去create一个ApplicationContext,而不是去拿在项目启动之初生成的那个ApplicationContext。

      方法2.首先建立一个工具类

    package com.wonyen.util;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class MySpringContext implements ApplicationContextAware {
        private static ApplicationContext context;//声明一个静态变量用于保存spring容器上下文
    
        @Override
        public void setApplicationContext(ApplicationContext context)
                throws BeansException {
            this.context=context;
        }
        public static ApplicationContext getContext(){
            return context;
        }
    
    }

      1.可见该工具类实现了ApplicationContextAware接口,实现该接口的类会接收到spring容器传过来的ApplicationContext对象,从而可以实现操纵spring容器中的所有bean的效果。但是这里我们并不在这个工具类里面去获取bean,我们暂且把获取来的ApplicationContext对象存放起来,放在哪里呢,就是放在该类的一个静态变量中context中,然后我们再给它一个静态的get方法,供其他的类去调用。

      2.有了这个工具类还没用,spring容器不会无缘无故去执行setApplicationContext方法把ApplicationContext 对象传入给它,所以必须在ApplicationContext.xml文件里面去配置,如下所示。

    <!-- util -->    
        <bean class="com.wonyen.util.MySpringContext"></bean>  

      这样,当项目启动时,就会加载这个工具类,并把ApplicationContext 传入。当然你也可以采用注解的方式,即在该类上加上@Component注解。

      3.在其他类调用,只需要这样一行代码就可以了。

    ApplicationContext context =MySpringContext.getContext();

      经验证,采用这种方式获取的ApplicationContext的速度明显比前面那种快很多。

      方法3:还有一种方法可以获取ApplicationContext,就是传入一个ServletContext对象。然后用WebApplicationContextUtilsgetWebApplicationContext获取一个WebApplicationContext,WebApplicationContext是ApplicationContext的子类,他比ApplicationContext类多了一个获取ServletContext的方法。

    ServletContext servletContext = event.getServletContext();
     ApplicationContext application = WebApplicationContextUtils
                    .getWebApplicationContext(servletContext);

       其实上述方法能获取到WebApplicationContext时因为web项目在启动的时候,在启动spring容器的时候,把WebApplicationContext作为一个属性放入了ServletContext中,所以我们才可以采用spring提供的这个方法来获取到WebApplicationContext

      方法4:因为WebApplicationContext是ApplicationContext的子类,所以获取到WebApplicationContext其实就是获取到了ApplicationContext。所以还有一种更为简单的方法,直接通过ContextLoader的静态方法getCurrentWebApplicationContext()就可以获取到当前的WebApplicationContext对象.

    代码如下:

    WebApplicationContext webApplicationContext = ContextLoader
                    .getCurrentWebApplicationContext();

       PSSS:关于第一种方法和后面三种方法,为了验证猜想,即采用new ClassPathXmlApplicationContext("applicationContext.xml");这种方法会重新生成一个ApplicationContext对象,做了如下代码的验证。

    ApplicationContext context = MySpringContext.getContext();
            ApplicationContext newContext = new ClassPathXmlApplicationContext(
                    "applicationContext.xml");
            System.out.println("获取已有的ApplicationContext对象" + context);
            System.out.println("新建的ApplicationContext" + newContext);

      得到的结果是:

      可见这两个确实不是同一个对象。验证成功。

    转载于:https://www.cnblogs.com/roy-blog/p/6362411.html

    展开全文
  • spring上下文的理解

    2012-07-18 10:25:23
    困绕一天的问题,终于解决了,解决方案简单到不能再简单。 背景:xml配置 以及 class配置 ...原因:getBean所在的上下文在xml配置中,而dao所在的配置在class配置中,getBean的缩主类SpringContextUtil...
  • 你可能在学习其他框架的时候,听到过“生命周期”的概念,通常,框架会提供给你回调方法,在生命周期的关键点,框架会调用这些回调方法。...在Spring容器中的对象(Bean),也有着自己的生命周期,只不过比较简单一...
  • 当一个类实现了ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有bean,这个类可以直接获取spring配置文件中,所有有引用到的bean对象。@Componentpublic final class ...
  • 本文示例源代码或素材下载 ... 在Web开发开发中,常常需要从JSP或者Servlet或者Action中获取ApplicationContext对象,这时候,就无法使用new关键字通过查找配置文件来实例化ApplicationContext这个对象了。Spri...
  • 前言基于Spring Cloud的全链路灰度蓝绿发布功能,其中一个场景是,基于Header传递的全链路灰度路由,采用配置中心配置路由策略映射在网关或者服务,支持根据用户自定义Header跟路由策略整合,最终转化为路由Header...
  • 在调用反射方法之后,@Autowired注入对象为空。 解决方法: method.invoke(object, parameters) 改成  method.invoke(spring.getBean(&...获取spring上下文的方法: https://www.cnblogs.com/yjbjingcha/p/675...
  • 问题描述:项目的权限是用SpringSecurity实现的,项目中有个需求,实现需求的逻辑如下: 启动SpringBoot后启动一个线程去监听redis...我们将当前应用security上下文的所有数据保存在SecurityContextHolder里面,...
  • 当我编写单元测试时,我遇到了一个问题,即我无法从“src / main / java”获取bean,而且似乎上下文只加载来自“src / test / java”的bean.这是我的代码.单元测试:src / test / java / ...
  • 定时器的类继承QuartzJobBean后,托管在Spring中的Bean无法获取到,不管是实例化还是默认加载获得的对象都为空值,这时候需要手动获取ApplicationContext的上下文,才能取得被Spring保管的对象。public class ...
  • 在netty handler开发中,我们无法将spring的依赖注入到... 创建一个implements ApplicationContextAware 接口的类,实现它的setApplicationContext 方法,这样我们就可以获取spring上下文对象,获取Bean;该类需要...
  • 发现一个有趣的现象,一般job都会在执行前去初始化一次ac,而任务监视器SupervisorQueueJob不会,因此启动时初始化ac为null,SupervisorQueueJob会始终无法获取上下文,也即其所需的bean。使得队列任务得不到执行。 ...
  • 问题: 项目中多线程添加数据,mybatisplus元数据填充功能,填充创建人时,数据是来自 spring security SecurityContextHolder.getContext....配置安全上下文全局策略SecurityContextHolder.setStrategyName(...
  • Spring配置多数据源导致事物无法回滚 - 环境 ...1.测试启动,构建spring容器,并将applicationContext注入到TestContext,构造测试上下文容器 2.TestContextManager从spring容器中获取数据源事务管理器D
  • Spring 项目在启动的时候是先初始化...如果定义的扫描范围重复的话,会导致bean会初始化两次,同时也会引起一些问题,比如事务失效,properties文件中使用@Value注入的属性无法获取,因为这些配置一般会在Spring的配...
  • listener中无法使用spring @autowired自动注入,因为...这时就需要从spring 上下文中获取,最好的办法是写一个spring上下文获取bean的工具类。 代码如下: 1 @Service 2 public class SpringContextHolder i...
  • Spring学习-源码

    2021-03-04 12:56:23
    Springboot框架源码解读学习 Spring框架主要有...但是当上下文重新刷新完毕后可以通过context工厂获取Bean 2. SpringBean生命周期 3.SpringAOP 4.SpringIOC 5.Spring事务 6.弹簧过滤器 7.弹簧监听器 8.弹簧拦截器
  • Spring事务触发机制

    2020-05-06 18:47:21
    Spring 事务的触发原理 事务的触发会在代理类调用方法的时候触发 原对象内部调用是...比如通过spring上下文获取代理类 用代理类在a里调用b此时事务生效 简言之一句话 代理(aop)是Spring事务的管理者 与原对象无关 ...
  • spring一些总结

    2019-04-25 10:47:00
    说到spring,我想只要是做java的都会很熟悉,在开发中应该是使用频率最高的框架之一了,...有时候我们无法通过注解来拿到spring容器中的bean,这时候可以通过上下文,即ApplicationContext来获取bean。为了得到上下...
  • 工程的初始位置,其中配置了Servlet的上下文、监听器。 web容器   管理servlet、监听器和过滤器,但这些不受Spring或者Spring MVC掌控,这些类中无法直接使用Spring注解注入bean对象。那要怎么获取bean对象呢? ...
  • 前言 今天在做项目的时候,我在监听器里面使用@Value注解获取配置文件中的值,然后...后来我发现了一个问题,我设置的Listener类和springboot不能共享spring上下文,因为我这个类没有通过@Component注解加入到sp...
  • 前言今天在做项目的时候,我在监听器里面使用@Value注解获取配置文件中的...后来我发现了一个问题,我设置的Listener类和springboot不能共享spring上下文,因为我这个类没有通过@Component注解加入到spring管理,...
  • 前言今天在做项目的时候,我在监听器里面使用@Value注解获取配置文件中的...后来我发现了一个问题,我设置的Listener类和springboot不能共享spring上下文,因为我这个类没有通过@Component注解加入到spring管理,...
  • 后来接口改造为了调用方便,引入feign,于是导致获取不到irequest上下文无法传递header及cookie等问题。 问题复现: 1、丢失herder及cookie 2、丢失request 问题原因: 出于安全考虑,默认不会传递header及cookie...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

无法获取spring上下文

spring 订阅