`
wenlongsust
  • 浏览: 71755 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Spring动态获取IoC容器中管理的Bean

 
阅读更多

原文链接:http://pbcljf.blog.163.com/blog/static/340340192010513537424/

Spring框架将DI模式发挥到了极至,因此,系统里面用Spring管理的Bean相互之间的获取是非常方便的,只要使用者提供一个setter方法并在配置文件中配置该属性就可以。

但是,对于系统中非Spring框架管理的类,如果需要获取Spring管理的类,或者,程序中需要动态的根据Be

an的id来获取Bean实例,不可能事先为该类提供所有需要的Bean属性的setter方法,在类似这样的情况下,

获取Spring框架管理的类实例的方法有多种,现在简单总结如下:

方法一:在初始化时保存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(ServletContextsc)
ac1.getBean(”beanId”);
ac2.getBean(”beanId”);
说明:
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后

在通过它获取需要的类实例。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。


方法三:继承自抽象类ApplicationObjectSupport
说明:
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationCont

ext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext

context)方法将ApplicationContext 对象注入。

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

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

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

以上方法适合不同的情况,请根据具体情况选用相应的方法。

这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知

道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运

行环境,尽量通过DI的方式获取需要的服务提供者。

本人认为,方法五比较可行,可以设计一个工具类,专门来获取Spring中的类。减少对业务代码的侵入性。

小龙推荐:动态获取IoC容器管理的Bean依赖于项目的运行环境,因此可以通过配置参数的方式选择实现方式

如果是C/S架构的项目,可以通过FileSystemXmlApplicationContext程序接口构造ApplicationContext对象;

如果是B/S架构的项目,可以通过Spring提供的工具类获取ApplicationContext对象,即第二种方法。

无论怎么实现,都需要注意加载的Spring配置文件的路径,推荐使用classpath取相对路径,方便项目的移植。

分享到:
评论

相关推荐

    关于SpringBoot获取IOC容器中注入的Bean(推荐)

    在给定的示例代码中,我们可以看到,作者使用了第三种方式,创建了一个公共类`SpringUtil`来获取IOC容器中注入的Bean对象。这个类实现了`ApplicationContextAware`接口,使用`setApplicationContext`方法来设置`...

    第四章 在Ioc容器中装配Bean

    综上所述,本章通过介绍IoC容器的概念、Bean的定义、依赖注入、作用域、生命周期管理以及自动装配等知识点,为开发者深入理解Spring框架如何管理和装配应用中的Bean提供了重要的理论基础,并且指导开发者如何在实际...

    spring在IoC容器中装配Bean详解

    在 Spring 框架中,IoC 容器是 Bean 的容器,负责创建、管理和装配 Bean。在本文中,我们将详细介绍 Spring 在 IoC 容器中装配 Bean 的过程。 一、Spring 配置概述 Spring 配置概述分为三部分:基于 XML 的配置、...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <value>org.gjt.mm.mysql.Driver ...

    Spring IOC容器实现分析.pdf 下载

    在实际开发中,我们可以使用Spring的IOC容器来管理数据库连接池、事务管理器、服务接口的实现类等。例如,通过@Qualifier注解指定特定的Bean,使用@Autowired注解自动注入依赖,或者通过@Scope注解定义Bean的作用域...

    Spring的IoC容器初始化源码解析

    而控制反转则是将这种控制权交给外部容器(如Spring的IoC容器),由容器来负责实例化、配置和管理组件之间的关系。 ##### 2.2 依赖注入的实现方式 依赖注入(Dependency Injection,DI)是实现控制反转的一种常用...

    Spring中IoC优点与缺点解析

    IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC ...

    SpringIOC容器对Bean管理的相关案例

    SpringIOC容器对Bean管理的相关案例

    Spring容器中IOC

    FactoryBean是另外一种方式来获取对象实例,通过getBean方法可以取得实体类,实际使用一般是在后期,spring去集成mybatis,mybatis中的核心对象SqlSessionFactory纳入ioc容器管理。 IOC容器是Spring框架的核心组件...

    模拟Spring的IoC容器实现注解自动装配

    而注解自动装配(Autowired)是Spring IoC容器的一种高级特性,它允许我们通过注解来声明对象之间的依赖,无需手动编写XML配置。现在,我们将深入探讨如何模拟Spring的IoC容器实现注解自动装配。 首先,我们需要...

    Spring为IOC容器注入Bean的五种方式详解

    Spring为IOC容器注入Bean的五种方式详解 Spring 框架中,IOC(Inverse of Control,控制反转)容器是核心组件之一,用于管理 Bean 的生命周期。在 Spring 中,IOC 容器可以通过五种方式来注入 Bean,本文将对这五...

    Spring的IoC容器

    IoC容器是Spring框架的心脏,它负责管理对象的生命周期和对象之间的关系。在本篇中,我们将深入探讨Spring的IoC容器的工作原理、主要功能以及如何使用。 ### 1. IoC容器的概念 IoC,即控制反转,是一种设计模式,...

    spring IOC反射装载bean

    在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理交给了容器来处理。在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    手写一个SpringIoc容器

    本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...

    Spring源代码解析(一):IOC容器.doc

    理解Spring的IOC容器,尤其是BeanFactory接口,有助于深入探究Spring如何管理对象的生命周期、依赖关系和装配过程。通过源代码阅读,我们可以看到Spring如何优雅地将这些复杂的概念转化为可扩展和灵活的代码,从而更...

    Spring IoC容器实现的结构分析

    在执行过程中,Spring IoC容器首先通过`BeanDefinitionReader`加载和解析bean定义,然后`BeanFactory`根据`BeanDefinition`创建bean实例。如果bean配置了自动装配,`AutowireCapableBeanFactory`会处理依赖注入。...

Global site tag (gtag.js) - Google Analytics