欢迎您访问IOC文件配置的系列之二:控制反转!

IOC文件配置的系列之二:控制反转

更新时间:2024-05-03 10:09:13作者:佚名

前言

我最近写的系列文章得到了很多读者的好评,也有读者希望我多写这方面的文章。 甚至有读者私信我,问我如何阅读源码。 为此,我打算写一系列的源码解读来回馈一直支持我的粉丝们。

不知道你是否有以下经历:

源代码非常复杂。 说实话,这种文章很难写。 很难解释清楚。 写完之后会很长。 读者可能没有耐心读下去,读完后很容易忘记。

我打算采用图文结合的方式,去其糟粕,只解读一些精华部分,让读者在阅读源码时有一个清晰的思路,不至于迷失方向。 最重要的是,看完之后你能记住很多关键流程。

在庞大的系统中,IOC(控制反转)贯穿始终,其作用不言而喻。 我们先从IOC开始,介绍一下它的主要流程,给有需要的朋友一些指导。

入口

容器的顶层接口是:,但是我们使用更多的是它的子接口:。

通常,如果我们想手动初始化一个通过xml文件配置的容器,代码如下:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User)applicationContext.getBean("name");

如果想手动初始化通过配置类配置的容器,代码如下:

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);User user = (User)applicationContext.getBean("name");

这两个类应该是最常见的入口,但却殊途同归。 最终他们会调用一个方法,这才是容器初始化的真正入口。

顺便说一句,这些并不是唯一调用方法的两个类。 我们用一张图来整体理解一下:

虽然调用方法的类有很多,但我还是决定以类为例来给大家讲解一下,因为它足够经典,而且相对来说难度不那么大。

我再说一遍,由于源代码量巨大,即使我能一口气读完,恐怕你也没有耐心读下去。 所以我会采用Hello, Me的方式,忽略一些细节,只关注关键点。 如果有对某些细节感兴趣的同学,请加我微信与我交流,或者关注我后续的文章,会详细讲解。

方法

该方法是ioc的真正入口,负责初始化容器。

既然这个方法的作用是初始化容器,为什么这个方法不叫init呢?

答案很简单,因为它不仅仅被调用一次。

类中的run方法会调用该方法,该方法会调用一次该方法。

类中的方法会调用类中的run方法。 该方法也将被调用一次。

这就是为什么项目中引入该方法会被调用两次的原因。

类中的ntext方法会调用该方法,该方法会调用一次该方法,但是会提前判断容器是否被激活。

所以这里的意思是重建。

好了,不废话了。 以下是需要重点关注的关键步骤:

其实上图中乍一看似乎方法很多,但真正核心的方法却并不多。 我主要讲一下最重要的几个:

解析xml配置文件

ry方法会解析xml bean配置,生成对象,并注册到容器中(说白了就是在很多map集合中)。

经过几层调用(不详述,很简单),就会调用该类的方法:

该方法将循环(.xml 文件路径)ioc是什么意思,调用另一个方法,并逐个解析每个文件。

经过一系列运算后,会转化为和,然后转化为对象进行分析。

解析xml文件时,需要判断它是默认标签还是自定义标签。 处理逻辑不同:

只有 4 个默认标签:

对应的处理方法为:

注意:,,等都是自定义标签。

从上图中处理标签的n方法开始,经过一系列的调用,最终会转入类的n方法。

该方法包含关键步骤:解析元素生成和注册。

自定义属性的内容很有趣,这里不再赘述。 现在用得不多了。 有兴趣的同学可以加我微信,私聊我。

产生

让我们重点关注它是如何生成的。

上面的方法会调用类方法:

一个标签将对应一个对象。

该方法会调用同名的重载方法:n,真正创建对象,并解析一系列参数来填充对象:

其实实际的创建逻辑很简单,直接new一个对象:

真正的复杂性在于前面属性的解析和赋值。

登记

通过解析上面的xml文件生成了很多对象。 接下来,您需要将对象注册到容器中,以便容器可以初始化bean。

Utils类中的on方法非常简单,只有两个过程:

我们先看一下类的on方法是如何注册的:

接下来我们看看类方法是如何注册alias别名的:

这样就可以通过多个不同的别名找到同一个名字,然后再通过名字找到。

修订

上面的对象已经注册到容器中了。 接下来,如果我想修改注册的对象该怎么办呢?

通过方法中的方法修改对象。

经过一系列的调用,最终会到达类方法:

流程看上去很长,但实际上逻辑比较简单,主要是处理和ssor。

它本身就是一个特殊的ssor。 它还会执行 ssor 的逻辑,但它只是添加了一个额外的方法。

也许最重要的是,它处理@注释。

登记

处理完前面的逻辑后,该方法就会调用注册。 它的功能非常强大,将在后面的文章中详细讲解。

经过一系列的调用,最终会到达类方法:

注意ioc是什么意思英语作文,这一步只是注册,实际使用稍后再说。

总结

之前主要介绍过:

容器初始化的入口点

该方法的主要流程

解析xml配置文件

产生

登记

修订

登记

以上内容只是容器初始化的前期准备工作。 先给大家预览一下,真正的表演在后面:实例化bean、依赖注入、初始化bean、调用等等。

亲爱的朋友们,展开公众号右上角“设为星标”即可立即看到我的好文章。 它纯粹是提供信息的。 错过实在可惜。

为您推荐

(一周新看点)2017级新生开学典礼暨军训动员大会举行

9月20日下午,由洛阳师范学院副校长宋文献任组长,省教育厅发展规划处副处长杨冰、中原工学院发展规划处处长高斌、郑州轻工业学院教务处处长张东初、河南城建学院教务处处长赵安芳等组成的专家考评组来到我校,就学校河南省示范性应用技术类型本科院校建设工作进行检查指导。

2024-05-03 09:23

纯属咎由自取!高考移民也不是对其他考生的不公平

还好学校火眼金睛,及时发现这一问题,并给该考生邮寄了退学通知书,要是让这名学生顺利入学且顺利毕业的话,岂不是对其他考生的不公平?而且考生们千万不要以为能顺利入学就行了,即使已经顺利拿到毕业证书,高考移民的身份一旦被发现,毕业证书和学位证书就会立即被撤销。

2024-05-03 09:15

2022年度全国会计专业技术中级会计资格考试延期考试公告

财政部办公厅9月29日发布《关于2022年度全国会计专业技术中级资格考试延期考试安排及有关事项的通知》(财办会〔2022〕33号),定于2022年12月统一组织一次中级会计资格延期考试,考试采用无纸化方式。“全国会计资格评价网”公布2022年度中级会计资格延期考试成绩。

2024-05-03 08:30

石家庄市发布高考英语口试安排通知6月16日至17日

#2021年河北石家庄普通高校招生外语口试工作的通知#】©无忧考网从石家庄市教育局了解到,2021年河北石家庄普通高校招生外语口试工作的通知已经发布,为方便考生了解情况,现将有关事宜通知如下:今年我市英语口试安排在石家庄学院进行。(附:石家庄市2021年高考英语口试报名缴费系统使用说明)

2024-05-03 08:16

千呼万唤始出来,高考分数线终于公布了

千呼万唤始出来,高考分数线终于公布了,全国率先公布省份是使用全国一卷的河北省,于昨日晚上公布了2020高考河北分数线并夜里凌晨可以查询成绩

2024-05-03 07:16

2023杭州各学校录取分数线汇总2023年杭州市区

2023杭州各学校录取分数线汇总2023杭州余杭临平中考各高中录取批次分数线汇总(持续更新)2023杭州萧山区中考第三批录取分数线公布2023杭州中考录取各类高中学校分数线汇总表一览2023杭州萧山区高中招生第二批录取分数线公布

2024-05-02 21:22

加载中...