`

Spring_常用的5种获取spring 中bean的方式

 
阅读更多

ref: http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html

 

常用的5种获取spring 中bean的方式总结:

 

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

代码:

ApplicationContext ac = new FileSystemXmlApplicationContext("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。

 

方法三:继承自抽象类ApplicationObjectSupport

说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。

Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

 

方法四:继承自抽象类WebApplicationObjectSupport

说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

 

方法五:实现接口ApplicationContextAware

说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。

Spring初始化时,会通过该方法将ApplicationContext对象注入。

 

 

 

虽 然,spring提供了后三种方法可以实现在普通的类中继承或实现相应的类或接口来获取spring 的ApplicationContext对象,但是在使用是一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件application-context.xml文件中进行配置。否则获取的ApplicationContext对象将为null。

 

 

 

如下是我实现了ApplicationContextAware接口的例子

 

package quartz.util;

 

import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

 

public class SpringConfigTool implements ApplicationContextAware{//extends ApplicationObjectSupport{

 

private static ApplicationContext context = null;

private static SpringConfigTool stools = null;

public synchronized static SpringConfigTool init(){

  if(stools == null){

   stools = new SpringConfigTool();

  }

  return stools;

}

 

public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

  context = applicationContext;

}

 

public synchronized static Object getBean(String beanName) {

  return context.getBean(beanName);

}

 

}

 

 

 

XML文件中的配置信息

 

 

 

最后提供一种不依赖于servlet,不需要注入的方式

注意一点,在服务器启动时,Spring容器初始化时,不能通过以下方法获取Spring 容器,如需细节可以观看源码org.springframework.web.context.ContextLoader

 

Title1 import org.springframework.web.context.ContextLoader; 

import org.springframework.web.context.WebApplicationContext; 

 

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 

  wac.getBean(beanID); 

 

分享到:
评论

相关推荐

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    spring 获取bean

    spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean

    线程中获取spring 注解bean

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

    尚学堂_Spring_0600_IOC_Bean_Scope

    在Spring中,Bean是那些由容器管理的对象,它们通过XML、注解或Java配置的方式定义,并由Spring容器实例化、装配和管理。 接下来,我们要了解Bean的Scope。在Spring中,Bean可以有多种Scope,包括: 1. **...

    spring_day01

    4. **XML配置与注解配置**:Spring支持两种主要的配置方式:XML配置和注解配置。XML配置是早期常用的,通过`<bean>`标签定义Bean;而注解配置更简洁,如`@Component`、`@Service`、`@Repository`和`@Controller`等,...

    Spring定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...

    Java中Spring获取bean方法小结

    获取Bean的两种常见方式是: - 使用`FileSystemXmlApplicationContext`,从文件系统加载配置文件。 - 使用`ClassPathXmlApplicationContext`,从类路径加载配置文件。例如: ```java ApplicationContext context...

    java spring工具类 方便在非spring管理环境中获取bean

    java spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取bean...

    @PostConstruct注解用来获取springbean对象.txt

    获取springbean对象

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    SpringTest_springtest_spring_java_Framework_

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力而著名。"SpringTest_springtest_spring_java_...

    王勇_JAVA教程_Spring_源代

    - `spring_static_proxy`可能包含了Spring的静态代理模式实现,这是AOP的一种方式,通过代理类来拦截方法调用并执行额外的操作。 这个教程的全面性和深度可以帮助开发者深入了解Spring框架,从基本的依赖注入到...

    spring_2.5_core_lib.zip

    标题中的"spring_2.5_core_lib.zip"表明这是一个与Spring框架2.5核心库相关的压缩文件,包含了一些核心组件和依赖的库。这个压缩包主要用于支持基于Spring 2.5版本的应用开发。 1. **Spring框架**: Spring是一个...

    Spring_in_Action中文版(第二版)

    4. 配置Bean:阐述XML和注解两种方式来定义Bean及其依赖关系,以及如何在Spring配置文件中声明Bean。 第二部分,5.Spring_in_Action中文版(第二版)_part05.pdf,可能会涵盖Spring的AOP(面向切面编程)和事务管理:...

    Spring_ClassPathResource获得bean对象

    在Spring框架中,ClassPathResource是获取类路径资源的一个重要工具。它允许我们从类路径(classpath)中读取文件,如配置文件、属性文件等,这对于构建和管理Java应用程序非常有用。本篇文章将深入探讨如何使用Spring...

    Spring如何获取Bean

    Spring 中获取 Bean 的多种方式 在 Spring 框架中,获取 Bean 是一个非常重要的步骤,因为它是使用 Spring 框架的基础。Spring 提供了多种方式来获取 Bean,这些方式可以根据不同的应用场景选择使用。 通过 XML ...

    spring_api+spring_reference中文版

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理以及数据访问等。"spring_api+spring_reference中文版"是一个包含Spring框架API和参考指南的...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    要从一个非Spring管理的类中获取Bean,我们需要先创建或获取`ApplicationContext`实例。有多种方式可以做到这一点,例如: 1. 通过`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`加载XML...

    spring_day02_spring_

    5. **无XML配置的应用**:探讨如何在没有XML配置的情况下构建Spring应用,尤其是在Spring Boot框架中的实现。 6. **实战案例**:“account”可能是用于演示的简单业务对象,通过不同的配置方式(XML和注解)来创建...

    spring_day03_spring_

    Spring提供了两种代理方式:JDK动态代理和CGLIB代理。前者基于接口实现,后者则适用于没有接口或者接口过多的情况。这部分内容会讲解如何通过Spring的AOP(面向切面编程)来创建代理对象,实现方法拦截,增强功能,...

Global site tag (gtag.js) - Google Analytics