一 、 在web应用中,我们常用ApplicationContext接口来获取ioc容器里面的资源,ApplicationContext是BeanFactory的子接口之一,并且对BeanFactory做了许多扩展,所以在绝大部分工作场景下,都会使用ApplicationContext作为ioc容器。

可以通过ApplicationContext的一个子类——ClassPathXmlApplicationContext初始化xml配置文件在获取实列bean

ApplicationContext context=new ClassPathXmlApplicationContext("App-context.xml");Account ac=(Account) context.getBean("account");

不建议使用此方法,建议使用第二种。

二、  在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容器中的Bean,无需访问Spring容器本身。在这种情况下,容器中的Bean处于容器管理下,无需主动访问容器,只需接受容器的依赖注入即可。

但在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能。为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。

public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext = null;/*** 获取静态变量中的ApplicationContext.*/public static ApplicationContext getApplicationContext() {assertContextInjected();return applicationContext;}/*** 从静态变量applicationContext中得到Bean, 自动转型为所赋值对象的类型.*/@SuppressWarnings("unchecked")public static <T> T getBean(String name) {assertContextInjected();return (T) applicationContext.getBean(name);}/*** 从静态变量applicationContext中得到Bean, 自动转型为所赋值对象的类型.*/public static <T> T getBean(Class<T> requiredType) {assertContextInjected();return applicationContext.getBean(requiredType);}/*** 清除SpringContextHolder中的ApplicationContext为Null.*/public static void clearHolder() {applicationContext = null;}/*** 实现ApplicationContextAware接口, 注入Context到静态变量中.*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {SpringContextHolder.applicationContext = applicationContext;}/*** 检查ApplicationContext不为空.*/private static void assertContextInjected() {Validate.validState(applicationContext != null,"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");}}

Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传给该方法——该方法中的实现部分将Spring传入的参数(容器本身)赋给该类对象的applicationContext实例变量,因此接下来可以通过该applicationContext实例变量来访问容器本身。

转自:ApplicationContextAwareJ接口的使用

spring通用获取ioc容器中配置的bean的工具类相关推荐

  1. Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean

    Spring 中有两种类型的 bean , 一种是普通的 bean , 另一种是工厂 bean , 即 FactroyBean. 工厂 bean 跟普通 bean 不同 , 其返回的对象不是指定类的一 ...

  2. java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

    前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...

  3. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  4. 六、spring之通过FactoryBean为ioc容器中添加组件

    前面我们已经介绍了几种为容器中添加组件的方法,今天一起学习通过FactoryBean添加组件的方法. 首先我们准备一个类,也就是我们需要注册进spring的ioc容器中的类 类Color: // 不必 ...

  5. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  6. 头条一面:Spring IOC容器中只存放单例Bean吗?

    最近,很多小伙伴出去面试,感觉自己面的不是很理想,回来后,不少小伙伴把面试题做了记录发给我,让我给大家解析下,然后发出来.当我看到这些面试题时,快速在脑海中构建起了整个知识体系,从基础到框架.从分布式 ...

  7. Spring中将BeanDefinition注册到IOC容器中

    Spring中将BeanDefinition注册到IOC容器中 XML配置元信息 <bean name="-" - /> 注解: @Bean,@Component,@I ...

  8. Spring5 - 向IOC容器中添加组件的4种方式

    文章目录 概述 方式一: @CompentScan 适用场景 Code 方式二: @Bean 适用场景 Code 方式三: @Import 适用场景 Code Demo1 Code Demo2 + 实 ...

  9. Spring框架学习[IoC容器高级特性]

    1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...

  10. IOC 容器中那些鲜为人知的细节(关于 autowiring)

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) Spring IOC 容器提供了两种管理 Bean 依赖关系的方式: 1).显式管理:通过 BeanDefin ...

最新文章

  1. 终止js程序执行的方法
  2. 查看MYSQL数据库中所有用户及拥有权限
  3. (转)自动化管理工具Saltstack之nginx部署
  4. C++ cctype定义的函数 - 学习笔记(7)
  5. pandas中where函数的用法
  6. JAVA入门级教学之(方法-6)
  7. python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...
  8. 常量数组 python_python数据科学系列:numpy入门详解教程
  9. java删除指定数据_java 从数据删除指定值
  10. Sprite Editor 图集切片精灵
  11. matlab绘制奈奎斯特图
  12. libjpeg-turbo 2.1.2 交叉编译
  13. .net reactor使用教程(4)——.net reactor针对De4Dot脱壳工具的应对
  14. JavaFX教程资源
  15. python用什么软件编程?
  16. 图像处理——简单浮雕效果和倒影效果实战
  17. 移动硬盘制作随身系统
  18. 好好学习,持续学习,才能持续赚钱
  19. 太阳能手机充电器设计
  20. 大数据与机器学习-大数据预测

热门文章

  1. Javascript特效:字体背景跑马灯
  2. C#:常用字符整理自用
  3. Java基础学习(4)-动态代理
  4. cartographer探秘第四章之代码解析(二) --- 传感器数据处理过程
  5. 基于分割的PTD渐进三角网加密滤波(SBF)算法
  6. 单目标跟踪paper小综述
  7. LeetCode之猜数字大小
  8. Network in Network 算法解析
  9. iOS CoreData (二) 版本升级和数据库迁移
  10. WPF案例 (五) 对控件界面使用倒影