`
MINGMING_0302
  • 浏览: 22546 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

获取Spring容器对象

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

    但是,对于系统中非Spring框架管理的类,如果需要获取Spring管理的类,或者,程序中需要动态的根据Bean的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(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框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。
分享到:
评论

相关推荐

    Web项目中使用Spring, 使用 Spring 的器监听器 ContextLoaderListener.docx

    获取Spring容器对象 在 Web 项目中使用 Spring 框架,首先要解决在 web 层(这里指 Servlet)中获取到 Spring容器的问题。只要在 web 层获取到了 Spring 容器,便可从容器中获取到 Service 对象

    获取Spring容器

    在Service端,自定义ApplicationContext,获取Spring容器。从而,通过编码的形式,手动获取注册到容器中的对象。

    动态代理接口并注册到spring容器

    实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象

    Spring.html

    Spring IOC 控制反转:把创建对象的权利交给Spring 创建对象 1.... 2.... 3.... ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则...使用容器对象去获取Service对象

    05-IoC入门案例-入门案例制作

    我们先来实现IoC也就是...知道怎么样告诉Spring容器了,接下来如何获取到Spring容器? 被管理的对象交给Spring容器,你也管好了,下边我要用了,我是不是得从你里边拿出来,你是谁呢,换句话说,Spring容器怎么得到呢?

    Spring.NET学习笔记-实现一个简易的IoC框架

    在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明...

    spring杂谈 作者zhang KaiTao

    1.11 在spring中获取代理对象代理的目标对象工具类 1.12 如何为spring代理类设置属性值 1.13 我对SpringDAO层支持的总结 1.14 我对SpringDAO层支持的总结 1.15 我对SpringDAO层支持的总结 1.16 我对Spring 容器管理...

    Spring基础.pdf

    不需要在代码中通过new的⽅式去在逻辑运⾏中再去创建对象,可以直接从IoC容器中去获取 项⽬启动时已创建完成的实例对象。有效地避免了对象创建过程中所带来的性能消耗。 • 有效地降低了程序与程序之间的耦合度,...

    Spring.NET 学习笔记—对象的创建

    的类型,但通过该对象定义的名称获取的则是由工厂方法所创建的对象)。工厂方法的产品对象可以是工 厂方法所在的类型,也可以是其它类型(按:很多情况下工厂方法位于单独的类型中) 通过实例都你从最基础的实例化...

    用于获取Spring Bean依赖关系图的工具(高分毕设).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    07-IoC配置-scope属性

    单例的对象是在加载spring容器时就创建了,且此后你在同一个bean获取资源时,用getBean()方法得到的对象都是同一个地址值的对象 prototype:,设定创建出的对象保存在spring容器中,是一个非单例的对象 非单例的...

    Spring Bean的作用域.docx

    如果bean的作用域的属性被...Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,singleton作用域是Spring中的缺省作用域。

    Spring.3.x企业应用开发实战(完整版).part2

    1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 ...

    HelloSpring.zip

    我的博客中“maven环境搭建及Spring入门”的项目代码。在idea中运行成功。 1。创建IOC容器 2。通过xml装配对象 【简单类型用value、复杂(引用类型)用ref、数组,集合,Map的装配】 3。IOC容器获取bean的方式 * ...

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

    Java - Spring-IoC(Inverse of Control)–> 控制反转

    一、Spring简介 1. 概述 ...工厂模式 + 反射机制:工厂模式提供创建方法,通过反射获取需要加载的类的全限定名称,通过工厂加载产生需要的类对象。 ② AoP(Aspect Oriented Programing) --> 面向切面编程

    Spring面试题

    Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。...

    Spring中文帮助文档

    12.2.2. 在Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的...

    Spring API

    12.2.2. 在Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的...

Global site tag (gtag.js) - Google Analytics