一.spring ioc 通过问题深入理解spriing ioc原理
1.什么是spring,你是怎么理解的?
小编觉得这个问题是一个开放性的问题,需要综合回答。
下面我们从三个方面来阐述一下:
(1)个人理解,spring是一个轻量级javaee的解决方案,里面整合很多优秀的设计模式,比如工厂,单例,模板,动态代理,策略,责任链,观察者,适配器,装饰器,等设计模式,为什么需要设计模式呢,这里可以说明一下,因为设计模式有六大原则,这里不赘述,可以自己百度一下,他一些经典代码的总结,就行我们学汉语,水平一般的说话比较啰嗦,没有成语,谚语,水平高的有成语,谚语,文言文,古诗,比较经典,这也是一个道理。
(2)扩展理解,可以理解为spring就是一个平台,平台上有很多卖家,一个的卖家就代表一个个的项目,像spring-reamework,spring-boot,spring-data,spring-jdbc等。
(3)官网理解,Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
2.ioc有什么作用?
这个问题其实比较简单,可以自己百度一下,个人觉得回答这个其实也比较复杂,可以一下三个方面进行理解.
(1)先说一下什么ioc,可以根据字义理解一下,也可以结合第一个问题回答,很多人都会简单说是控制反转,你要问他为什么要控制反转他就不知道了,开始懵逼了,这是对spring不理解造成的,要是再问他控制的是什么,反转的是什么这一下就完蛋了,彻底懵逼了,这里简单解释一下,只是引导一下大家,为什么要控制反转,其实就是解耦合,把new 对象,从硬编码中解处理,怎么解的,可以通过配置文件,或者spring工厂,其实就是通过工厂,工厂利用反射创建对象把耦合给解了,什么是控制就是对代码的控制权,如果没有spring我们都是new对象,有了spring ioc就有了控制和管理权,反转就是把代码反转到spring 工厂里。
(2)要说一下 bd建模的流程,就是BeanDefinition的封装过程,包括的好多属性,是否抽象,是否单例,是否可依赖,是否是FactoryBean等,这个需要说明一下这是展现你对spring源码的理解,这个可以好好说一下。
(3)要说一下bean的生命周期,创建,初始化,销毁,
简单说下流程 getBean–>doGetBean–>createBean–>doCreateBean–>
addSingleFactory–>createBeanInstance–>populateBean–>
initializeBean 其实这个流程比较复杂,也是对spring源码一个考验
(4)如果你水平比较高可以说一下里面的循环依赖,这里不做详细说明,会专门有一篇文章去介绍spring bean的循环依赖。
(5)这里要说一下aop也是一种bean也是被ioc管理的,可以结合spring bean的生命周期进行理解,这个也不赘述,会有专门文章进行讲解的,也可以从网上查
3.谈谈你对spring工厂的理解?
这个问题其实同上,也需要理解下,首先要理解什么是工厂设计模式,再理解spring是怎么运用的,主要看一下(DefaultListAbleBeanFactory这个类)
4.spring bean的创建方式有几种?
这个问题你可以百度一下
5.spring的创建模式有哪几种,加上mvc共几种?
这个问题也比较简单,可以百度一下
6.什么是注入,为什么要注入?
这个也自己百度
7.spring bean初始化方式有哪几种?
8.什么是复杂对象,创建复杂对象有那几种方式?
9.如何控制简单对象创建的次数?
10.如何控制复杂对象创建的次数?
11.为什么要控制对象的创建次数,什么对象只创建一次?
12.什么样的对象每次都要创建新的?
13.为什么要学习对象的生命周期?
对spring的理解
于 2021-03-07 16:33:40 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)