基于Spring的Java应用会通过ApplicationContext接口提供应用程序配置。我们常常需要在代码中获取当前的ApplicationContext。如在集成测试时,需要通过ApplicationContext获取各种Bean。这时可以使用FileSystemXmlApplicationContext通过提供配置文件的路径,来得到应用程序上下文:

String[] paths = { "applicationContext.xml", ...};
ApplicationContext ctx = new FileSystemXmlApplicationContext(paths);
SomeBean bean = (SomeBean) ctx.getBean("someBean");

在实际生产中,往往会根据不同的客户情况部署不同的配置,所以配置文件不能写死在代码中。这时应该通过HttpServlet来获取应用程序上下文。比如,我们可以定义一个ApplicationContextWrapper类,提供全局的ApplicationContext

public class ApplicationContextWrapper {    private static ApplicationContext applicationContext;       public synchronized static void setApplicationContext(ApplicationContext context) {applicationContext = context;}public static ApplicationContext current() {return applicationContext;}public static Object getBean(String beanName) {return applicationContext.getBean(beanName);}}

同时,要自定义一个HttpServlet,在init方法中通过传入的ServletConfigWebApplicationContextUtils来设置ApplicationContextWrapper

public class ApplicationContextLoaderServlet extends HttpServlet {  public void init(ServletConfig config) throws ServletException {ApplicationContextWrapper.setApplicationContext(WebApplicationContextUtils.getWebApplicationContext(config.getServletContext()));}
}

当然,不要忘了在web.xml中配置这个servlet:

<servlet><servlet-name>ApplicationContextLoaderServlet</servlet-name><servlet-class>net.kirin.sample.ApplicationContextLoaderServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>

这样就可以在代码中使用ApplicationContext了:

DataSource dataSource = (DataSource) ApplicationContextWrapper.getBean("dataSource");

在代码中获取ApplicationContext实例相关推荐

  1. spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程

    整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet第二步:通过request从Controller获取ModelAndView.现在来讲解第三步:reques ...

  2. 如何从代码中获取当前方法的名称[复制]

    本文翻译自:How to get the name of the current method from code [duplicate] This question already has an a ...

  3. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  4. spring mvc在Controller中获取ApplicationContext

    spring mvc在Controller中获取ApplicationContext web.xml中进行正常的beans.xml和spring-mvc.xml的配置: 需要在beans.xml中进行 ...

  5. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  6. 安卓代码中获取dp值为控件设置宽高,获取dimen值

    引言: 今天遇到一个问题,在自定义控件的时候,要求在代码中设置控件的宽高.本来自以为:对嘛,很简单,就是直接设置params //这样直接初始化的时候设置LayoutParams iconparams ...

  7. Spring容器中获取Bean实例的七种方式(附实战源码)

    目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...

  8. Spring容器中获取 Bean 实例的七种方式

    点击关注公众号,利用碎片时间学习 说明 一.写作原因 首先解释一下写这篇博文的原因,因为在使用spring框架的过程中获取bean是非常常见的操作,但是网上非常的博文大多承自一家之言,因此很多可操作性 ...

  9. 如何在代码中获取Java应用当前的版本号?

    最近需要在项目中获取项目的版本号,最笨的方法莫过于硬编码一个版本号,当然我也是这么干的.不过闲下来的时候突发奇想Spring Boot项目中pom.xml定义的版本号能不能通过API获得呢?于是利用摸 ...

最新文章

  1. 用树莓派DIY车钥匙,开锁仅需90秒
  2. Java练习 SDUT-1132_斐波那契数列
  3. java简单的for循环多线程
  4. JavaScript入门几个概念
  5. 【学习笔记】局域网基本概念和体系结构,以太网、无线局域网与PPP协议、HDLC协议
  6. MVC系列学习(十五)-验证码
  7. 查找丢包故障点的一个好命令:pathping
  8. MarkDown说明
  9. Nugine: Rust 性能调优
  10. Java之HashMap用法
  11. 软件项目管理 1.2.PMBOK与软件项目管理知识体系
  12. 软件开发常见的软件系统总结
  13. HTML5期末大作业:直播网站设计——仿在线媒体歪秀直播官网模板html源码(11个页面) HTML+CSS+JavaScript 期末作业HTML代码...
  14. 关于中宣部实名认证过程中的一些问题和解答
  15. 主板前置音频线接法几例(转)
  16. 英特尔凌动处理器_AEWIN SCB6913 基于Intel Atom(Elkhart Lake)x6425E处理器
  17. python列表逆序输出_Python 让列表逆序排列的 3 种方式
  18. UNPv1第二十三章:线程
  19. (二)开集识别学习 open-set recognition(OSR)
  20. 江苏省计算机技能大赛项目,南通职业大学荣获2020年江苏省职业院校技能大赛计算机网络应用赛项一等奖...

热门文章

  1. Spring MVC中数据绑定流程和原理
  2. AlphaGo的原理
  3. 实验-思科设备划VLAN做单臂路由
  4. Android虚拟键盘遮挡EditText的解决方案
  5. WPF:下拉列表的简单实现
  6. [OpenGL]未来视觉1-Android摄像头采集基础
  7. 【2018.2.28】思考与练习
  8. React Native进行签名打包成Apk
  9. velocimeter-view android测速仪效果
  10. windows下expdp自动备份脚本