`
zousy999
  • 浏览: 19420 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring中获得applicationcontext的方法总结

阅读更多

 

方法一:在初始化时保存ApplicationContext对象

 

注:其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一样是基于路径的。   

说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。


方法二:通过Spring提供的工具类获取ApplicationContext对象

 

 

import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");

说明:
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
其中 servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext(); 另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出 WebApplicationContext 对象: WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);


方法三:继承自抽象类ApplicationObjectSupport

 

说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。


方法四:继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext


方法五:实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。
在web应用中一般用ContextLoaderListener加载webapplication,如果需要在action之外或者control类之外获取webapplication思路之一是,单独写个类放在static变量中,
类似于:

 

public class AppContext {

  private static AppContext instance;

  private AbstractApplicationContext appContext;

  public synchronized static AppContext getInstance() {
    if (instance == null) {
      instance = new AppContext();
    }
    return instance;
  }

  private AppContext() {
    this.appContext = new ClassPathXmlApplicationContext(
        "/applicationContext.xml");
  }

  public AbstractApplicationContext getAppContext() {
    return appContext;
  }
} 

 不过这样,还是加载了2次applicationcontext,servlet一次,路径加载一次;觉得不如直接用路径加载,舍掉servlet加载.
在网上也找了些其他说法:实现ApplicationContextAware,,, 接口,或者servletcontextAware接口,还要写配置文件。有的竟然要把配置文件里的listener,换成自己的类,这样纯粹多此一举。不过有的应用不是替换,是在补一个listener,我在一版的jpetstore(具体那一版不知道)里发现了这个:[web.xml]里 

  <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>com.ibatis.jpetstore.util.SpringInit</listener-class>
    </listener>

其中SpringInit实现接口ServletContextListener :

package com.ibatis.jpetstore.util;

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


public class SpringInit implements ServletContextListener {
    

    private static WebApplicationContext springContext;
    
    public SpringInit() {
        super();
    }
    
    public void contextInitialized(ServletContextEvent event) {
        springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
    }
    

    public void contextDestroyed(ServletContextEvent event) {
    }
    
    public static ApplicationContext getApplicationContext() {
        return springContext;
    }

    
}

  

 
分享到:
评论

相关推荐

    Spring在应用中获得Bean的方法

    总结来说,Spring提供多种方式让我们在应用中获取Bean,包括直接通过名称、类型,或者利用注解实现自动装配。了解这些机制,有助于我们更好地理解和使用Spring框架,提高代码的可维护性和灵活性。同时,源码分析能...

    Java中Spring获取bean方法小结

    - **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...

    如何获得spring上下文的方法总结

    在Spring框架中,获得上下文的方法是非常重要的,通过本文,我们将详细介绍获得Spring上下文的方法总结,并结合示例代码进行详细解释。 一、获得上下文的方法总结 在Spring框架中,获得上下文的方法可以分为四种:...

    java中获得spring中的BEAN

    通过上述介绍可以看出,在Java中获取Spring中的Bean有多种方式,可以根据项目的实际情况选择最合适的方法。无论是使用XML配置还是基于注解的方式,或者是自定义工具类,Spring框架都提供了非常灵活的机制来支持各种...

    传智播客 Spring 完全文档 笔记总结

    ##### 2.3 从 Spring 容器中得到 Bean - **获取 Bean**:可以通过 ApplicationContext 接口来获取 Spring 容器中的 Bean。例如,使用 `applicationContext.getBean("beanName")` 方法即可获取指定名称的 Bean 实例...

    spring-framework-5.3.20

    3. **WebFlux增强**:WebFlux框架在5.3.20中得到进一步优化,提高了响应式流处理的效率和可维护性。 4. **Security增强**:Spring Security在5.3.20中提供了更丰富的安全控制和认证策略,增强了OAuth2的支持。 5. ...

    spring-framework-5.3.29.zip

    Spring 5.3.29版本是其发展过程中的一个重要里程碑,它提供了诸多改进和新特性,旨在提升开发效率,优化性能,以及增强对现代Java生态系统的支持。本文将深入探讨Spring Framework 5.3.29的源码,揭示其内部工作机制...

    spring2.5.6.zip

    3. **AOP增强**:在2.5版本中,Spring引入了基于注解的AOP支持,允许开发者直接在方法上使用@Aspect注解来定义切面,简化了切面的定义和管理。 4. **JSR-303 Bean验证**:Spring 2.5.6开始支持JSR-303标准的Bean...

    spring及其相关dtd

    Spring框架是Java企业级应用开发中的核心框架,它简化了应用程序的开发,提供了全面的依赖注入(DI)、面向切面编程(AOP)以及众多其他功能。在J2EE环境中,Spring通过其强大的IoC(Inversion of Control)容器和...

    Spring开发指南_夏昕

    无论是初学者还是有经验的开发者,都能从中获得有价值的洞察和技巧,提升自己在Spring框架上的开发能力。通过学习本书,开发者将能够更好地理解和应用Spring框架,构建出高质量的Java应用程序。

    spring_MVC中文教程pdf

    在本段提供的文档内容中,主要涉及到Spring框架和MVC模式的相关知识点,这是一本关于Spring框架开发的指南书籍,其中包含了Spring框架的设计思想、开发中的实际使用、以及作者在项目实践中的一些经验总结。...

    监听器获取Spring配置文件的方法

    总结以上方法,从ServletContext获取ApplicationContext是最推荐的方式,因为它避免了重复加载配置文件,且能确保与Spring的依赖注入(Dependency Injection, DI)保持一致。这种方法使得我们的监听器可以利用Spring...

    Spring-framework-4.3

    2. **自动配置增强**:Spring Boot的自动配置功能在4.3版本中得到了进一步优化,更加智能地推断和配置应用程序上下文,减少了开发者手动配置的工作量。 3. **Web MVC改进**:Spring MVC框架在4.3版本中增强了对...

    Spring_ClassPathResource获得bean对象

    总结来说,Spring的ClassPathResource是处理类路径资源的强大工具,它使开发者能够方便地加载和使用类路径中的文件,如XML配置文件,进而实现bean的初始化和管理。在学习和应用过程中,结合具体场景和需求,我们可以...

    31. Spring Boot导入XML配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...

    spring-framework-4.0.5.RELEASE-dist.zip

    总结,Spring Framework 4.0.5 RELEASE是Java开发中不可或缺的一部分,它的强大功能和广泛适用性使其在软件开发领域占据了重要地位。通过深入理解和熟练运用,开发者能够构建出高效、灵活且易于维护的软件系统。

    spring-4.3.9

    2. 容器管理:Spring容器是管理对象生命周期和装配的对象,分为BeanFactory和ApplicationContext两个层次。4.3.9版本中,容器的性能得到优化,对大规模应用提供了更好的支持。 二、AOP(面向切面编程) Spring的...

    自定义spring控制反转(依赖注入)

    在Spring中,它意味着对象的依赖关系不再由对象自身决定,而是由外部容器(如Spring的ApplicationContext)在运行时注入。这种设计模式使得对象可以在不依赖具体实现的情况下工作,增强了代码的可扩展性和灵活性。 ...

    spring3.2.0.RELEASE版jar包【整合版,包含所有的主要jar包】-正式版下载

    - **核心容器**:包含了Spring的核心功能,如BeanFactory、ApplicationContext等,这些是Spring框架的基础,用于实现依赖注入和面向切面编程。 - **AOP模块**:提供了面向切面编程的功能,可以在不修改业务代码的...

    Spring源码解析文件说明

    - **获取BeanFactory**:通过`getBeanFactory()`方法获得当前上下文中的`BeanFactory`,通常情况下为`GenericApplicationContext`中的`BeanFactory`。 - **转换BeanFactory**:将`BeanFactory`转换为`...

Global site tag (gtag.js) - Google Analytics