Spring IoC 容器的理解

本文深入解析Spring框架中的IoC(控制反转)概念,介绍BeanFactory与ApplicationContext两种核心容器的区别与应用场景,帮助理解Spring如何管理和控制Bean的生命周期。

Spring IoC 容器

IoC是什么

  • IoC (全名Inversion of Control,即控制反转)是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。
  • Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。
  • Spring 提供了两种 IoC 容器,分别为 BeanFactory 和 ApplicationContext,接下来将针对这两种 IoC 容器进行详细讲解。

BeanFactory

  • BeanFactory 是基础类型的 IoC 容器,提供了完整的 IoC 服务支持。简单来说,BeanFactory 就是一个管理 Bean 的工厂,用于创建,配置,管理bean,bean之间的依赖关系也由BeanFactory负责维护。

  • BeanFactory对bean的实例化过程,无须bean的调用者关心,调用者只需要通过getBean()方法获得指定bean的引用。

  • BeanFactory有个ApplicationContext子接口,该接口比BeanFactory增强了更多的功能,该接口的实例有时被称为Spring的上下文,通常都应该考虑ApplicationContext接口,只有非常关注内存的情况下,才考虑使用BeanFactory。

ApplicationContext

  • ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。该接口比BeanFactory增强了更多的功能。

  • ApplicationContext 接口有两个常用的实现类,具体如下

    • ClassPathXmlApplicationContext

      该类从类路径 ClassPath 中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作,具体如下所示

      ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/springTest.xml");

    • FileSystemXmlApplicationContext

      该类从指定的文件系统路径中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作,具体如下所示

      ApplicationContext applicationContext = new FileSystemXmlApplicationContext("G:\spring-framework-master\spring-context\src\main\resources\springTest.xml");

      它与 ClassPathXmlApplicationContext 的区别是:在读取 Spring 的配置文件时,FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,它可以获取类路径之外的资源。

BeanFacotry 与ApplicationContext 区别

二者的主要区别在于,如果 Bean 的某一个属性没有注入,则使用 BeanFacotry 加载后,在第一次调用 getBean() 方法时会抛出异常,而 ApplicationContext 则在初始化时自检,这样有利于检查所依赖的属性是否注入。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值