《Java后端知识体系》系列之Spring中的IOC

我是一个会敲代码的汤姆猫,为什么叫汤姆?因为我的女朋友叫杰瑞!

在这里插入图片描述

前言:为了应对接下来几个月的面试,开始系统的整理自己的知识体系,希望下次面试能得到一个好的offer。

今天看了一篇很不错的讲解IOC的文章,一个小姐姐写的二,帮自己解惑了,觉得真的不错,所以自己在此做个总结!
原文章在此

1、IOC容器的分类

Spring中IOC容器有两个:BeanFactory
					ApplicationContext。

2、BeanFactory解析

BeanFactory是最底层的IOC容器,BeanFaccory只是实现了简单的容器,可以将它理解为实现了get、put方法的HashMap。
HashMap中的key是beanName,value是beanObject。
其中在BeanFactory中是通过懒加载的方式创建容器的。
在这里插入图片描述

3、ApplicationContext解析

ApplicationContext是BeanFactory的子类,对BeanFactory的补充以及增加了更多的功能。
ApplicationContext包含了两个子类:ClassPathXmlApplicationContextFileSystemXmlApplicationContext
在这里插入图片描述

4、IOC解析

4.1、IOC容器是存储什么的容器呢?

答案是:`对象`
该容器中存储了程序中我们需要用到的各种对象以及资源。

4.2、控制反转
说完了容器开始说字面的意思,也就是IOC要表达的就是控制反转,那么IOC的控制是什么意思?又控制的什么呢?又反转了什么呢?

答案是:控制代表的是:bean的创建和管理
	   控制了什么:控制的是bean的整个生命周期
	   反转:管理bean的权利交给Spring就是反转

4.3、IOC的主要作用
我们为什么要使用IOC这样的一种思想呢?

答案:`解耦`,解除对象之间的耦合关系,通过容器来管理对象之间的关系,即使一个对象做出了改变也不会影响整个系统的运行。

4.4、DI(依赖注入)
说完了IOC再来说DI
DI要分开说:

D(依赖):程序运行需要依赖一些外部资源
I(注入):容器加载了外部的资源,将这些资源注入给程序内的对象,维护程序对象资源之间的内外关系。

如何理解IOC与DI的关系呢:IOC其实是一种思想,而DI是IOC思想的具体实现。

5、创建对象

在IOC容器中当加载了Xml配置文件中的数据之后,是通过什么方式进行创建对象的呢?
答案就是:getBean方法
在这里插入图片描述
通过getBean方法实现了我们平时实现的new创建对象。
同时对象在容器中是单例的也就是我们通过多次getBean获取到的对象是同一个。
在这里插入图片描述
上图中useruser2是同一个对象,如果通过equals去判断最后会返回true
我们可以通过修改配置文件中的scope属性来改变单例模式。

6、bean的生命周期

  1. Spring 容器根据配置中的 bean 定义中实例化 bean。
  2. Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。
  3. 如果 bean 实现BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用setBeanName()
  4. 如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()
  5. 如果存在与 bean关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization() 方法。
  6. 如果为 bean 指定了 init 方法( 的 init-method 属性),那么将调 用它。
  7. 最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。
  8. 如果 bean 实现DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。
  9. 如果为bean 指定了 destroy 方法( 的 destroy-method 属性),那么将 调用它。

最后:我是会敲代码的汤姆

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值