00:00
好,为了我们更深入的掌握B的核心技术,接下来呢,我们来学习第七章B启动配置原理,这章呢,我们将会说s boot的启动原理,运行流程,以及我们之前说的自动配置原理,特别是我们这个运行流程,S boot的这个运行流程虽然说很复杂,但是呢,在这个运行流程中还包含了几个非常重要的事件回调机制,那我们也希望通过掌握这些事件回调机制,我们能真正的干预到spring BOO整个启动运行流程中,特别是这几个事件回调机制呢,牵扯到的这几个啊接口,一个呢是我们这个application contest initial,一个呢叫我们这个spring application run listener,还有我们这个application runner commandner,只要我们在研究运行流程的时候呢,遇见这么几个接口Di都。
01:01
核心的关注一下,哎,就这么几个,好,那我呢就来专门创建了一个工程,这个工程里边呢,我只导入了我们简单的这个外网应用模块,我们在这个里边呢,我们来研究启动运行流程,启动运行流程呢,我们主要都是来运行这个慢方法,从这开始作为一个入口的,所以说呢,我们给这来打上一个断点,我们呢来以debug的方式进行运行。好,那么启动起来,那么首先我们来到这一行代码,Spring application run,传入我们的主配置类以及这个二是我们命令命令行参数,那先来step into。那么这个run方法呢,还是把这两个参数一包装,我们来调用run方法,我再来step图,哎,接下来我们看到这个wrong方法,它呢首先是new一个spring application,然后再进行状,那么我们spring应用启动相当于分为两步,第一步先创建spring的application对象,第二步再来运行状,我们先在这儿呢记录一下两步,第一步呢是来创建spring application对象。
02:13
然后第二步才是运行。运行方法那么我们来看创建spring application对象,它做了什么事呢?我就来step into进来,这呢是创建对象,好,我们来step over。我们来到它的这个对象创建的里边,它呢给这属性都附上一些默认值,好,它呢首先来到这个initialize方法,哎,这个对象创建相当于调用了这个initial方法啊,这个方法呢,我们写在这儿。他来调用这个方法创建对象,而这个方法创建对象的啊,流程呢,我们来step into进来,进来呢,其实就是非常短这么一点流程,我们把这个流程呢,来也复制过来,我们来看在这个流程里边他做了一些啊什么事。
03:07
在这个流程里边呢,好,我们来一点一点来看,首先呢,它来判断我们这个source source呢,这就是我们,哎主配置类啊是什么在这有,然后呢,把我们这个S啊不等于空,它先来保存起来,相当于先来保存我们这个主配置类,哎那以后我们就知道主配置类在哪了,保存啊主。主配置类,那保存起来以后呢,它保存在这个source属性里边,下来第二步有一个,哎,是web environment,这个呢,是来决定我们是不是web应用在这一块呢,哎,这个方法我们在下边能看到它呢,其实就是来判断,来判断呢,我们这个web应用环境的这个类,什么con web applicationt,包括有没有存在,如果存在就是web应用,所以这是它第二步来判断我们当前应用是否一个web应用走我们当前应用呢,是一个web应用,因为我导入了web模块,这是它的第二步判断。
04:13
判断当前是否一个web应用好,这个判断完了以后呢,接下来我们来看第三步将set initial LAS,这个set呢,我们点进来,它其实呢就是来为它赋值,而这个的作用呢,我们来可以看一下,它是get spring factory instance,然后传了一个application contexttest in,诶我们说遇见这些呢,大家都来注意一下,那么这个方法的核心步骤就是调用我们get spring factor instance,它呢,我来点进来,我们再来点进来,它其实就是有一个叫names,我再点进来。点进来它呢,其实就是从我们这个类路径下,Me for spring factor下找谁呢?找这些application contexttest initial拉,所以说呢,这一步。
05:12
它的作用呢,是从咱们这个类路径下找到Meta这个里边配置的所有。Application initial laza,然后保存保存起来,哎,先保存起来,而我们这个initial laza的配置呢,我们就来让他找,包括呢,它就在我们这个auto包,我们之前给大家有看过spring factor,诶,我们看这有application contest initialize这有一些东西,包括呢有好多包里边spring factor里边都有这个,好,那我们就来让他找,我们来,下一步我们来放行,它找到就行了,而我们这些引initial收拉,我们可以来看一下这引initial拉现在的值,哎,有六个,相当于呢,他就找到了这么六个引内收拉来保存起来。
06:07
每一个引内收拉呢,我们它是先保存起来,至于什么时候调用,哎,我们后来再说,那ctrl shift,哎,先把这个引内收拉来拿过来,好,这时呢,保存这些initial拉,然后呢,接下来他把所有类路径下的initial拉都拿到了以后,还有一个叫set,还是get factor instance,那就意思还是从我们这个me spring factor来找这些什么呢?Application listen,这就是它的第二步,还是从。我们这个类路径下找到,找到我们这个me spring里边配置的。配置的什么呢。配置的所有所有application listener,这些listener呢也有配置,我们看我们之前的这个info,好,Spring factor这里边呢有application呢,这有配一个包括呢,其他包里边也都有,大家都可以来看一下,诶这里呢看也有initialize,也有我们这些listener,所以呢,它是在这一步来先来找到这些配置文件里边所有的listener,我们来放行,这listener呢有多少,我点进来,我们来看这个listen的属性,哎,有十个,它也就找到了这些listen listen呢,我们听起来这就是监听器,什么时候调,我们一会儿也来说好保存。
07:42
好,我们把这个图呢,我们也放过来,Ctrl shift,哎,我们把这个图片进来。好,这呢就是它这一步来找到这些listener,然后呢,接下来我们再来看这listener他们都保存起来以后呢,这叫videos my application class,它是来决定哪个啊application class是一个主程序点进来,它呢是从相当于从我们传进来的,我们所有的配置类中看哪个类有慢方法,这个慢方法呢,就是我们这个主配置类,也就是说我们运行spring应用的时候,这个配置类呢,我们是可以来传多个的,因为这个run方法里边,诶我们这个配置类是一个object,这个数组包呢,在这个下边,哎,其实就是我们这个配置类可以来传多个,它来看哪个有慢方法,这就是我们这一步来。
08:39
从多个配置类中。多个配置类中找到,多个配置类中找到哪个是找到有。慢方法的主配置类,好,那么我们相当于这样执行完以后,我们的application对象我们就创建出来了。我们来往下。
09:06
下一步好,下一步我们这个INITIALIZE1创建完,我们这个spring对象就创建完了,那加第二步才是我们这个运行我们spring应用,那我们第一步我们就先说到这创建spring application对象,主要呢,就是将我们这些啊application initialize以及application先保存起来。
我来说两句