一般使用Spring完成了注入,在Service或SpringMVC 中可以通过注解的形式来获取 Spring的已经注入的Spring的bean如下所示:

@Resource(name = "userInfoMapper")
private UserInfoMapper userInfoMapper;

但是有些情况如在servlet中该如何获取该对象呢,因为SpringMVC 是基于Servlet的,所有的请求先通过一个默认的Servlet处理——org.springframework.web.servlet.DispatcherServlet(此选项在Web.xml中配置SpringMVC时,必须配置),所以手动建立的Servlet是不能自动获取注入的Bean的。需要通过ApplicationContext applicationContext 来获取:

this.xmlPacker = ((IXmlPacker) this.applicationContext.getBean("xmlPacker"));

applicationContext 的获取方法是添加一个监听器,在Context完成时进行初始化,具体的实现方法是:

继承ServletContextListener,重写contextInitialized,给webCtx赋值。

package com.casic.servlet;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ApplicationContextInit implements ServletContextListener {
  private static ApplicationContext webCtx = null;

  public void contextDestroyed(ServletContextEvent event) {
  }

  public void contextInitialized(ServletContextEvent event) {
    webCtx = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
  }

  public static ApplicationContext getWebApplicationContext() {
    return webCtx;
  }

  public static void setWebCtx(ApplicationContext webCtx) {
    webCtx = webCtx;
  }
}

在web.xml 中添加监听器

<listener>

  <listener-class>com.casic.servlet.ApplicationContextInit</listener-class>
</listener>

servlet 在 init()函数中使用ApplicationContextInit.getWebApplicationContext() 获取

public void init() throws ServletException {
  if (this.applicationContext == null) {
    this.applicationContext = ApplicationContextInit.getWebApplicationContext();
    this.xmlPacker = ((IXmlPacker) this.applicationContext.getBean("xmlPacker"));
  }
}

Servlet 获取 ApplicationContext的更多相关文章

  1. Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

    转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236  Spring获取ApplicationContex ...

  2. springMVC 使用WebApplicationContext获取ApplicationContext对象

    主要用于从application中获取bean 1.applicationContext 在web.xml中使用listener配置 <context-param> <param-n ...

  3. spring中获取applicationContext(2)

    前几天写web项目的时候,用到了spring mvc. 但是又写bean.我要在代码里面生成,而这个bean里面,又有一些属性是通过spring注入的. 所以,只能通过ApplicationConte ...

  4. spring中获取applicationContext

    常用的5种获取spring 中bean的方式总结: 方法一:在初始化时保存ApplicationContext对象代码:ApplicationContext ac = new FileSystemXm ...

  5. 获取applicationContext对象的方法

    方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext(&quo ...

  6. 在web项目中获取ApplicationContext上下文的3种主要方式及适用情况

    最近在做web项目,需要写一些工具方法,涉及到通过Java代码来获取spring中配置的bean,并对该bean进行操作的情形.而最关键的一步就是获取ApplicationContext,过程中纠结和 ...

  7. javaWeb普通类获取ApplicationContext

    网上看了很多关于获取ApplicationContext的方法,五大方法,但是我用web服务使用成功的就这一个,自己记忆下. import javax.servlet.ServletContextEv ...

  8. Spring获取ApplicationContext

    在Spring+Struts+Hibernate中,有时需要使用到Spring上下文.项目启动时,会自动根据applicationContext配置文件初始化上下文,可以使用ApplicationCo ...

  9. servlet获取参数时,request.getParameter("id")参数获取失败

    servlet获取参数时,request.getParameter("id")参数获取失败,这里的参数是“index”里面href中的参数 要注意,取不到值,是不是要取的参数有没有 ...

随机推荐

  1. 阿里云服务器 && 如何window链接到阿里云服务器

    现在的时间是:2016年10月11日 1:购买学生机 阿里云手机app上  ->  学生专区  ->  购买: 需要注意的是:如果没有自己需要的系统,比如没有linux操作系统的ecs,那 ...

  2. Oracle BFILE备忘

    创建目录 create or replace directory exp_dir as '/tmp'; 赋权 grant read, write on directory exp_dir to PUB ...

  3. chaper3_exerise_Uva1368_DNA序列

    #include<iostream> #include<stdio.h> #include<cmath> #include<string> #inclu ...

  4. SQL语句简介

    1.Top.Distinct Top 获取前几条数据,top一般都与order by连用 获得年纪最小的5个学生  select top 5 * from A order by classesId 获 ...

  5. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  6. Shell之变量操作

    1.定义变量:为了避免与环境变量冲突,一般用小写:如pp="mydql,kdkfeof"; 第二赋值方案: 调用变量使用$符号: 变量叠加: 2.输出采用echo,如上图所示: 3 ...

  7. .net学习笔记---lambda表达式(自执行方法)

    http://www.cnblogs.com/jesse2013/p/happylambda.html#b034 lambda表达式 http://www.cnblogs.com/OceanEyes/ ...

  8. Linux性能分析工具的安装和使用

    转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...

  9. 设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

    一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. ...

  10. HDU4008 Parent and son(树形DP LCA)

    先记录以1为根时每个节点子树儿子节点的最大与次小值,询问x, y时,先判断x在不在y的子树范围内,若不在,结果为y的儿子结点,后继的最小值. 若x在y的子树范围内,若y儿子最小值是x的前驱,从次小值与 ...