`

spring中如何得到bean(转)

 
阅读更多

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

代码:
ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContext.xml");
    ac.getBean("beanId");
   
说明:
   
这种方式适用于采用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()方法,可以方便的获取到ApplicationContextSpring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

 

方法四:继承自抽象类WebApplicationObjectSupport
   
说明:
        
类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
 
方法五:实现接口ApplicationContextAware
  
说明:
    
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。
 
以上方法适合不同的情况,请根据具体情况选用相应的方法。
这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。

 

     然后在Action中编写如下代码得到Context,(我是覆盖了Struts ActionsetServlet方法,也许还有更好的方法)。

     public void setServlet(ActionServlet servlet){
         super.setServlet(servlet);
         ServletContext servletContext = servlet.getServletContext();
        WebApplicationContext wac =    WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
         // get yours beans

     }


我需要在springbean中直接获取,这下可和我们常规的操作有些不同,因为springbean都是pojo的。根本见不着servletconfigservletcontext的影子。

  这里我需要指出spring给我们提供了两个接口:org.springframework.web.context.ServletContextAware

org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext .

代码如下:

publicclass DicBean implements ServletContextAware{
    
private ServletContext servletContext;

publicvoid setServletContext(ServletContext sc){
    this.servletContext=sc;
    System.out.println("项目的绝对路径为:"+servletContext.getRealPath("/"));
}
}

分享到:
评论

相关推荐

    spring运行过程中动态注册bean

    在Spring框架中,动态注册Bean是一项非常实用的功能,它允许我们在应用运行时向Spring容器添加新的Bean定义。这种能力在很多场景下都是极其有用的,比如根据不同的环境配置加载不同的服务实现,或者在运行时根据某些...

    Spring在应用中获得Bean的方法

    在Spring框架中,管理Bean是其核心功能之一。Bean是由Spring容器创建、初始化、装配以及管理的对象,它们在应用程序中扮演着重要的角色。本篇文章将深入探讨如何在Spring应用中获取Bean,以及相关的源码分析和实用...

    java中获得spring中的BEAN

    本文将深入探讨如何在Java中获取Spring容器中的Bean,并通过具体的示例来讲解这一过程。 ### Spring框架概述 Spring框架是由Rod Johnson创建的一个开源项目,旨在简化Java企业级应用程序的开发。Spring的核心特性...

    获得spring里注册Bean的四种方法

    获得 Spring 里注册 Bean 的四种方法 在 Spring 框架中,获取已注册的 Bean 对象是非常重要的一步。下面将介绍四种获取 Spring 里注册 Bean 的方法。 方法一:继承 BaseDispatchAction 这种方法常用于 Struts ...

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    在Servlet直接获取Spring框架中的Bean.docx

    当我们在Servlet环境中工作时,有时需要在Servlet中直接访问由Spring管理的Bean,以便利用Spring提供的服务和功能。以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即...

    Spring_ClassPathResource获得bean对象

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

    Spring实战之Bean的作用域singleton和prototype用法分析

    这意味着,如果多次从Spring容器中请求同一个`prototype` Bean,将会得到不同的对象。在配置文件中,`p2`被定义为`prototype` Bean,通过`scope="prototype"`指定。在`BeanTest`中,我们请求`p2`两次并进行比较,...

    Java获取Spring中配置的Bean的三种方式

    在Java编程中,Spring框架是应用广泛的企业级开发工具,它提供了一种强大的依赖注入机制,使得开发者可以方便地管理并获取容器中的Bean。本文将详细介绍在Spring框架中获取配置Bean的三种主要方法。 1. **通过...

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    在 Spring 框架中,Bean 的实例化是通过 BeanFactory 中的 getBean 方法来实现的,该方法根据 bean 的名字、Class 类型和参数等来得到 bean 实例。 在了解 Bean 的实例化过程之前,我们需要了解 Spring 框架中 IoC ...

    Spring实战之获得Bean本身的id操作示例

    Spring实战之获得Bean本身的id操作示例 在Spring框架中,获取Bean本身的id操作是一种常见的需求。通过实现BeanNameAware接口,Spring容器会在创建Bean时自动调用setBeanName()方法,并将Bean的配置id作为参数传给该...

    Spring Boot技术知识点:Bean装配1

    在Spring框架中,Bean是一个由Spring容器管理的对象,它可以通过依赖注入(Dependency Injection,简称DI)来获得其依赖项。Spring Boot利用Java配置或XML配置来定义Bean,但更倾向于使用Java配置,因为它更加简洁且...

    Spring bean为什么默认是单例

    同时,由于每次请求都能快速从缓存中获取Bean,因此响应速度也得到提升。 然而,单例Bean并非没有缺点。它的一个主要劣势是线程安全性。如果一个Bean是有状态的,即它包含可变的实例变量,那么在多线程环境中,多个...

    Spring 源码分析(Bean的初始化)

    在Spring框架中,Bean的初始化是一个至关重要的过程,它涉及到从XML配置文件或者注解中读取Bean的定义,解析并构建Bean实例。本篇文章主要分析了Spring如何通过`ClassPathXmlApplicationContext`来启动和初始化Bean...

    让spring解决控制springboot中bean的加载顺序的问题.docx

    在Spring Boot应用中,控制Bean的加载顺序是一个关键的议题,尤其是在处理复杂依赖关系或需要在特定时刻执行初始化操作的场景。Spring Boot遵循"约定优于配置"的理念,简化了配置,但同时也带来了需要手动干预Bean...

    springIoc实现原理

    3. **依赖注入**:Spring容器根据BeanDefinition中的依赖关系,为Bean注入依赖对象。 4. **初始化**:Spring容器调用Bean的初始化方法,完成对象的初始化。 5. **Bean管理**:Spring容器负责Bean的生命周期管理,...

    《spring in action》中文第三版

    - **字段注入**:直接通过字段来注入依赖,这种方式在Spring 4中得到了增强。 ### 总结 本章节主要介绍了Spring框架中的核心概念——Bean的相关知识点。从Bean的定义、生命周期管理到作用域设定以及装配方式等方面...

    Spring 中文开发手册

    Spring框架是中国开发者广泛使用的Java应用程序开发框架,尤其在企业级应用中占据主导地位。Spring以其模块化、松耦合的设计...无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的指导,提升你的Spring开发技能。

    Spring官方文档之核心篇

    Spring容器支持依赖注入(DI),允许通过构造器或setter方法将依赖注入到Bean中。 - **依赖注入方式**:构造器依赖注入和setter方法依赖注入是两种主要的注入方式。 - **依赖解析过程**:Spring容器在创建和配置...

    Spring中文开发手册下载 CHM

    总的来说,"Spring中文开发手册"是一份全面的参考资料,无论你是初学者还是经验丰富的开发者,都能从中获得关于Spring框架的深度理解和实践指导。通过学习并熟练掌握Spring,你将能够构建出更加高效、可扩展的企业级...

Global site tag (gtag.js) - Google Analytics