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、调用等等。

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

相关推荐

猜你喜欢

大家正在看

换一换