`

编程方式 获取ApplicationContext实例

阅读更多

       基于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");
 
 
分享到:
评论

相关推荐

    第24次课-1 Spring与Hibernate的整合

    通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate()就是Spring执行的持久化操作。 24.3 Spring对Hibernate的简化 24.3.5 HibernateDaoSupport Spring为与...

    Spring.html

    ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...

    Spring.3.x企业应用开发实战(完整版).part2

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring3.x企业应用开发实战(完整版) part1

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring中文帮助文档

    6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 ...

    Spring API

    6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    WEB-INF下的applicationContext.xml为Spring的配置文件,struts-config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。  本文后面的章节将从数据持久层->业务层->Web层的...

    Spring 2.0 开发参考手册

    6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 ...

    spring chm文档

    6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的...

    千方百计笔试题大全

    203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 51 205、EJB与JAVA BEAN的区别? 51 206、EJB的基本架构 51 207、MVC的各个部分都有那些技术来实现?如何实现? 52...

    java面试宝典

    203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 51 205、EJB与JAVA BEAN的区别? 51 206、EJB的基本架构 51 207、MVC的各个部分都有那些技术来实现?如何实现? 52...

    springmybatis

    请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1) 其实还有更简单的方法,而且是更好的方法,使用合理描述参数和...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics