当前位置: 首页 >Java技术 > Spring IOC的常见面试题

Spring IOC的常见面试题

为什么需要IOC?

1.效率方面
传统上创建对象都需要自己new出来,而ioc是将new对象的控制权交给工厂,由工厂来创建,相比于传统的方法,效率提升了很多。

2.管理对象方面
如果对象之间存在很多依赖关系,那么当需要修改维护其中一个对象时,会导致所有的对象都需要修改,牵一发而动全身。而ioc减少了代码之间的耦合,更好的管理对象。

IOC是什么?

ioc的全英文名是:Inversion Of Control ,直译过来就是控制反转,控制反转是把传统上由程序代码直接操控对象(new对象)的调用权交给ioc容器,由容器来实现对象的创建,依赖,销毁,初始化等等。

什么是 Spring IOC 容器?

Spring 框架是一个 IoC 容器的实现,DI 依赖注入是它的实现的一个原则,提供依赖查找和依赖注入两种依赖处理,管理着 Bean 的生命周期。Spring 还提供了 AOP 抽象、事件抽象、事件监听机制、SPI 机制、强大的第三方整合、易测试性等其他特性。

IOC 容器的职责?

依赖处理,通过依赖查找或者依赖注入
管理托管的资源(Java Bean 或其他资源)的生命周期
管理配置(容器配置、外部化配置、托管的资源的配置)

IOC 和 DI 的区别?

DI 依赖注入不完全等同于 IoC,更应该说 DI 依赖注入是 IoC 的一种实现方式或策略。
依赖查找和依赖注入都是 IoC 的实现策略。依赖查找就是在应用程序里面主动调用 IoC 容器提供的接口去获取对应的 Bean 对象,而依赖注入是在 IoC 容器启动或者初始化的时候,通过构造器、字段、setter 方法或者接口等方式注入依赖。依赖查找相比于依赖注入对于开发者而言更加繁琐,具有一定的代码入侵性,需要借助 IoC 容器提供的接口,所以我们总是强调后者。依赖注入在 IoC 容器中的实现也是调用相关的接口获取 Bean 对象,只不过这些工作都是在 IoC 容器启动时由容器帮你实现了,在应用程序中我们通常很少主动去调用接口获取 Bean 对象。

IOC容器的初始化流程和功能?

Spring IOC的常见面试题 _ JavaClub全栈架构师技术笔记

IOC容器的初始化流程就是bean的创建过程

概念态—刚在标签里写上还没有加载
定义态–把定义信息读到BeanDefinition中
纯静态–通过反射刚拿到实例化对象(里面的属性还没有赋值所以是纯净的)
成熟态–里面的属性注入完成
1.spring启动之后,读取xml配置信息、注解、java类,将每一个bean配置解析为一个BeanDefinition对象,再将所有的BeanDefinition对象放入BeanDefinitionMap中(其中bean的id为key键,BeanDefinition对象为值)。
2.从beanDefinitoinMap中取出所有的非懒加载beanDefinition实例化bean(通过反射来实例化),并将bean加载进缓存,即放入singletonObjects(仅单例)的map中。

IOC的优缺点?

优点:

1.加快了开发的效率,可以不用自己一个个new来创建对象,能通过工厂统一的创建。
2.消减了代码之间的耦合,提高了代码的可维护性和灵活性。
3.节约内存,减少了大量的创建对象,维护依赖,销毁对象的代码。

缺点:

1.利用反射来创建对象,单从反射和new的两种创建对象方法上对比,效率上折损了一些。
2. 创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
3 缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。

IOC有哪些扩展点?什么时候用?

所谓的扩展点就是底层对外提供的一些扩展接口

1.BeanPostProcessor 后置处理器的实现
BeanPostProcessor 后置处理器是 Spring IOC 容器经常使用到的一个特性, 这个 Bean 后置处理器是一个监听器, 可以监听容器触发的 Bean 声明周期事件。 后置处理器向容器注册以后, 容器中管理的 Bean 就具备了接收 IOC 容器事件回调的能力。 BeanPostProcessor 的使用非常简单, 只需要提供一个实现接口 BeanPostProcessor 的实现类, 然后在 Bean 的配置文件中设置即可

2.initializeBean方法为容器产生的Bean实例对象添加BeanPostProcessor后置处理器
同样在AbstractAutowireCapableBeanFactory类中,initializeBean方法实现为容器创建的Bean实例对象添加BeanPostProcessor后置处理器。

作者:有酒名无忧
来源链接:https://blog.csdn.net/qq_35757264/article/details/124217533

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/java/112154.html

标签:SpringIOC
分享给朋友:

“Spring IOC的常见面试题” 的相关文章