`

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()方法,可以方便的获取到 ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext (ApplicationContext context)方法将ApplicationContext 对象注入。 
   
方法四:继承自抽象类WebApplicationObjectSupport
说明:
     类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

方法五:实现接口ApplicationContextAware
说明:
     实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。

以上方法适合不同的情况,请根据具体情况选用相应的方法。
这里值得提一点的是:
系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知道它们是运行在Spring框架上的,因此,系统中应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。        然后在Action中编写如下代码得到Context,(我是覆盖了Struts Action的setServlet方法,也许还有更好的方法)。    
public void setServlet(ActionServlet servlet){
         super.setServlet(servlet);
         ServletContext servletContext = servlet.getServletContext();
         WebApplicationContext wac =    WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
         // get yours beans    
}


我需要在spring的bean中直接获取,这下可和我们常规的操作有些不同,因为spring的bean都是pojo的。根本见不着 servletconfig和servletcontext的影子。   这里我需要指出spring给我们提供了两个接口:org.springframework.web.context.ServletContextAware和 org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext了 . 代码如下:

public class DicBean implements ServletContextAware{  
         private ServletContext servletContext;

         public void setServletContext(ServletContext sc) {
                this.servletContext=sc;
               System.out.println("项目的绝对路径为:"+servletContext.getRealPath("/"));
         }
}
分享到:
评论

相关推荐

    几种spring获取bean的方法.txt

    ### 几种Spring获取Bean的方法 #### 1. 通过`WebApplicationContext`获取Bean 在Web环境下,Spring提供了`WebApplicationContext`接口,它是`ApplicationContext`的子接口,专门用于Web应用。可以通过`...

    Java获取Bean的几种方式.pdf

    本文主要探讨了Java获取Bean的多种方式,尤其在Spring Boot和IOC(控制反转)环境下。这些方式可以帮助开发者便捷地从Bean容器中检索和使用所需的Bean。 1. **初始化时保存ApplicationContext对象** 当应用启动时...

    线程中获取spring 注解bean

    当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...

    第一章 Spring4 简介及获取Bean

    获取Bean主要有以下几种方式: 1. **通过Bean的ID**:使用`ApplicationContext`的`getBean()`方法,传入Bean的ID来获取实例。 2. **自动装配(Autowired)**:使用`@Autowired`注解,Spring会自动匹配类型匹配的...

    Spring在代码中获取bean的几种方式.rar

    以下将详细介绍Spring在代码中获取bean的几种主要方法: 1. **`ApplicationContext` 接口** `ApplicationContext` 是Spring中最常用的接口之一,它提供了获取Bean的多种方法。例如,`getBean(String beanName)` ...

    SpringBoot 获取spring bean方式.rar

    本篇将详细介绍Spring Boot中获取Bean的几种常见方式。 首先,让我们理解什么是Spring Bean。在Spring框架中,Bean是一个由Spring容器管理的对象,通常代表应用中的业务组件或服务。Spring会负责Bean的创建、初始化...

    Spring在代码中获取bean的几种方式详解

    "Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序中最流行的框架之一,它提供了许多功能强大且灵活的功能之一就是Bean管理机制。Bean是Spring框架的核心组件,用于管理应用程序中的业务逻辑。在...

    Spring在应用中获得Bean的方法

    获取Bean主要有以下几种方式: 1. **通过名称获取Bean** 使用`ApplicationContext`的`getBean(String name)`方法可以直接根据Bean的定义名称获取到对应的实例。例如: ```java ApplicationContext context = new...

    Spring在代码中获取bean的方法小结

    总的来说,Spring提供了多种方式在代码中获取Bean,选择哪种方式取决于具体的应用场景和需求。通常,推荐使用依赖注入,如`@Autowired`,以保持代码的简洁性和可测试性。但在某些特殊情况下,如需在非Spring管理的类...

    详解Spring中bean实例化的三种方式

    在示例中,`User`类被配置为一个Bean,通过`ClassPathXmlApplicationContext`加载配置并获取Bean实例。 2. 静态工厂创建: 当需要通过类的静态方法创建Bean实例时,可以使用这种方式。首先,我们需要一个带有静态...

    Spring中关于Bean的管理的课件

    4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...

    学习Spring的一点代码01:如何获取bean?

    Spring提供了多种方式来获取Bean,下面将详细介绍几种常用的方法。 1. **基于XML的配置** 在传统的Spring应用中,Bean定义通常存储在XML文件中。我们可以通过`ApplicationContext`接口的`getBean`方法来获取Bean。...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    在非Spring管理的类中,如果你想使用Spring容器中的bean,有以下几种方式: - 实现ApplicationContextAware接口,Spring会在初始化时自动注入ApplicationContext。 - 使用`@Resource`注解,与`@Autowired`类似,...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    Spring 获取 WebApplicationContext、ApplicationContext 几种方法详解 在 Spring 框架中,获取 WebApplicationContext 和 ApplicationContext 对象是非常重要的,因为它们提供了访问 Spring 容器中的 Bean 对象的...

    获取Spring容器

    可以通过多种方式来初始化`ApplicationContext`,其中最常见的有以下几种: 1. **XML配置文件**:使用XML配置文件来定义Spring容器中Bean的配置信息。 2. **注解驱动**:使用注解如`@ComponentScan`、`@...

    Spring 应用上下文获取 Bean 的常用姿势实例总结

    在 Spring 框架中,有多种方式可以获取 Bean 对象。下面我们将介绍其中的一些常用姿势实例。 1. 使用 ApplicationContext 获取所有的 Bean ApplicationContext 提供了获取所有已经成功注入 Spring IoC 容器的 Bean...

    Springbean的几种注入方式都了解吗

    今天,我们将讨论 Spring Bean 的几种注入方式,并通过示例代码详细介绍每种方式的实现。 XML 注入 XML 注入是 Spring 框架中最早的注入方式。在 Spring Boot 框架出现之前,XML 配置被大量使用。虽然配置过程相对...

    Spring如何使用注解的方式创建bean

    在 Spring 框架中,Bean 的作用域可以分为以下几种: 1. singleton:单实例(默认),ioc 容器启动时就会创建对象放到ioc 容器中,以后每次获取都是直接从ioc 容器中获取 2. prototype:多实例(原型),ioc 容器...

    获取spring容器的方法

    本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...

    Java Spring Controller 获取请求参数的几种方法详解

    本文将详细讲解在Spring Controller中获取请求参数的六种常见方法。 1. **直接作为方法参数** 当请求是GET类型且`Content-Type`为`application/x-www-form-urlencoded`时,可以直接在Controller方法的参数列表中...

Global site tag (gtag.js) - Google Analytics