到底什么是IoC?有什么好处?怎么实现的?

本文深入探讨依赖倒置设计原则及其在Spring框架中的实现方式IoC,详细讲解BeanFactory和ApplicationContext的区别与联系,帮助理解依赖管理和代码解耦的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说下依赖倒置

依赖倒置是种设计原则,把原本的高层建筑依赖底层建筑“倒置”过来,变成底层建筑依赖高层建筑。
比如你要堆个积木,比如一个城堡,看看手里有一些完成的模块,来对城堡,就是城堡在依赖模块。即高层依赖底层。
一旦子模块改变,你就要重新设计城堡了。如果这种层次较多,那修改起来肯定是个噩梦。
而依赖倒置原则,即是根据城堡的设计图,设计子模块,子模块必须根据城堡设计图的要求设计,这样就是底层建筑依赖高层建筑了,也即是依赖倒置了。

IoC 依赖反转,是依赖倒置原则下的一种设计思路,具体的实现方法就是依赖注入。

spring 中的实现

在spring中,IoC实现是通过IoC容器,即BeanFactory。我们经常看到的ApplicationContext 就是BeanFactory的一个子类,而FileSystemXmlApplicationContext,AnnotationConfigApplicationContext,ClassPathXmlApplicationContext又是ApplicationContext的子类。
ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件,推荐使用这种。
FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
AnnotationConfigApplicationContext:当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
继承图如下:
在这里插入图片描述
而以上三个子类会去解析相应的xml文件或注解,将bean信息解析到对应beanDefination中。再根据beanDefination 通过反射生成bean对象,这样在需要用该该bean的地方直接注入即可。

Ioc有什么好处?

不用自己管理对象,拿了就用。
解除高层对底层的依赖,便于维护。
使代码开发更为简单。
易于测试。
易于做aop
等等

高频面试问题:

说一下BeanFactory和ApplicationContext的联系和区别?

通过beanFactory获取实例:

//XmlBeanFactory是典型的BeanFactory。
 BeanFactory factory = new XmlBeanFactory("XXX.xml");
 //获取一个叫做mdzz的bean。在这个时候进行实例化。
 factory.getBean("mdzz");

在beanFactory生成时,并没有初始化bean ,bean初始化延迟到第一次获取。

通过applicationContext获取

//当我们实例化XXX.xml的时候,该文件中配置的bean都会被实例化。(该bean scope是singleton)
ApplicationContext appContext = new ClassPathXmlApplicationContext("XXX.xml");

在singleton scope下,所有bean都会被立即初始化。

所以联系与区别就是
1.ApplicationContext是BeanFactory的子类,拥有丰富的功能,如事件传递,资源访问等。
2.BeanFactory 对bean进行延迟加载,而单例作用域下的Application,对bean进行急切加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值