00:02
Hello,大家好,我是小石啊,然后今天呢,给大家分享一个大多数人都不知道的一个小知识点吧,就是spring中的附子容器,它这个附子容器只存在于那个spring Mac中,还有spring cloud中,Spring中是不存在的啊。然后three Mac中也只存在于基于叉mail配置的方式,我们来,呃,就是我们来先回顾一下,就是我们当我们使用来开发web应用的时候,只需要继承这个ATP,然后实现service方法即可。就是所有的这个都有如都有如下的这个方法嘛,它有和生命周期相关的方法,有三个就是一,第一个就是它会隐译的方法,就是在索拉创建的时候会被调用,第二个的话就是处理请求,它会在隐译的隐译的方法被调用之后。我来接收请求,然后第三个的话就是销毁这个。
01:00
还有一个就是这个每一个对应一个con,保存和相关的配置,然后每一个web有一个contest,然后用来保存和容器相关的配置啊,我们来演示一下,就是在spring Mac中这个子容器是如何启动的。好吧,我这已经写好了一个应用,然后我这配置了一个权利属性。基于容器的属性啊啊,然后这个里面是一个外部级的can listener。然后这个是配置了一个PE light,然后是一个这个是light的属性啊,然后它的副容器启动就是在这个listener中的,我们来点进去看一下,就是在。外部容器就是通CAD容器启动的时候啊,它会发布两个事件啊,它会发布两个事件,就是它会发布两个事件,就是这两个事件,然后我们可以通过呃实现这两个方法拿到这两个,拿到这个事件就是当容器启动的时候,你看它会调用这个方法,然后在这个方法里面,它会启动这个负容器。
02:10
就是启动spring的容器。当启动完了,它会放到。Context全局属性中,然后这就完了。然后这个步骤就是副容器它已经启动完了,然后。我们是在那个容器启动开始,然后再调用这个在初始化这个dispa啊。所以说先执行这个listener,后执行Dis的。初始化方法,然后它describe,它它就是生命中具中有一个音译方法嘛,它因这个音译方法是在htv select病中。这个音译的方法中,它就会启动,你看我一直往下找。
03:04
它会启动子容器啊,我直接找到相应的位置啊,大家可以下来自己去debug一下啊。这个你看这个是从那个中,就是web中的全局属性中获得负容器。获取到负容器,然后这一步是创建,诶不对,这一步是创建子容器的过程。我们把刚才我们把这个负容器它传进来。你看它这就设置了一个负容器。设置了负容器,然后子容器启动。对,意思就是现在一个spring Mac应用程序中启动了两个容器,就是。两个容器,然后负容器,你看我们看这个负容器读的配置文件是这个spring contest,然后子容器读的是Mac的,然后负容器配置的扫描的包是service下面的包,子容器配置的是controller下面的包。所以说它俩的。
04:03
容器是不一样的,我们来演示一下,看看它到底一样不一样,我这写了继承了它的fd contest,就是容器启动的时候会把这个容器对象复过来,我们就看一下把它的ID打出来,看一下这个controller和这个service,它的孔就是容器的ID是否一致啊。如果不一致的话,就说明它启动了两个容器。好吧,我们来看一下啊。你看他现在已经打。他现在已经打印出来了,就是UR。我先把这个关了啊。你看这它打印出来us service它启动的是web applicationt这个容器,然后us control它启的是web applicationt杠的容器啊,所以说它确实是起了两个容器啊。
05:15
好,我们来回顾一下啊。就是负容器的启动是在它实现那个。监听we部容器的事件的时候启动的负容器,并把它设置到全局属性中,然后子容器的启动是在PA select的init方法中。然后它会初始化,先初始化子容器,然后设置负容器。对,然后把子容器启动。就是负子容器的话,对,你也可以把这个子容所有的病都放在子容器中,但是就是如果有负子容器的话,还是比较容易踩坑的,我说一个坑点,就是比如说在子容器中。
06:02
配置了。BA。然后在负负容器中配置的BB冰B使用自动依赖注入的并A。因为负容器是无法查找子容器的病,所以会抛出找不到并A的异常,这是如果你对附子容器这个概念不清楚的话。对,就始终找不到这个错误啊,因为你一直会认为我配了这个BA了,为什么他会扫描不到呢。对我们来说,到这我们来回顾一下,就是这个子容器,它是可以访问负容器中的B,然后负容器不能访问子容器中的B啊,就是这个在get b中方法可以得到实践啊,就是当从子容器中找不到对应的B时,会从负容器中找。就是spring Mac设置这种子容器估计就是为了隔离外部应用和基础组件。嗯,发生冲突吧,然后所以它放到两个容器中,但是可能后面觉得它这种父子容器的概念并不是特别好,所以说基于Java的。
07:09
基于Java spring Mac的启动方式,它就没有了父子容器这个概念啊。对,然后基于呃,Java con的spring Mac的启动过程我就不分析了,就放到我这个文档中了,就是然后。基于Java,它的启动方式就是非常的就是非常的简便,你只要实现web application initial接口。然后实现一个配置类,加上Mac,然后加上包扫描,然后。就可以进行工作了,就是非常的便捷好吧。最后呢,如果想获取这篇文章的话,点击头像私信回复专栏即可获得。好吧,然后今天的视频就到这里了,如果有帮助到你的话,欢迎点个赞,我们下期见喽,拜拜。
我来说两句