Springboot启动配置原理

一、启动原理

1.main方法是入口,传入主配置类和args

2.进入springbootApplicati的run方法:先创建SpringAppcition对象,再执行run方法

3.如何创建对象

   3.1 先把主对象保存

   3.2 再判断是不是web应用

   3.3 然后加载initializers类

       3.31 先创建主线程的类加载器 ClassLoader classLoader = Thread.currentThread().getConTextClassLoader()

       3.32 从classLoader中获取指定的url:classLoader.getResources("META.INF/spring.factories") ;

       3.33 通过url,可以获取到Properties

       3.34 再传入ApplicationContextInitializer.class,从Properties中获取指定的资源

       

      3.35 找到这6个资源

      

  3.4 创建listeners类

    

5.找到有main方法的主配置类

6.创建对象的所有操作如下图

7.run方法,启动应用

  7.1 从类路径下META-INF/spring/factories,获取SpringApplicationListeners(所以该监听需要配置)

  7.2 回调所有SpringApplicationListeners的start方法

  7.3 prepareEnvironment:创建ioc环境运行需要的环境,里面还有回调SpringApplicationListeners的prepared方法

  7.4 创建ApplicationContext(IOC容器):根据上面是否web应用,创建web的ioc还是普通的ioc,里面是用beanUtils.instantiate,反射出来

 7.5 new failureAnalyzers //做异常分析报告

 7.6 prepareContext(context,environment,listeners)准备上下文环境:传入ioc容器,ioc运行需要的环境,监听

      7.61 将enviroment环境保存到ioc 

      7.62 applyInitailizer(context):将之前保存的initailzer的6个对象,传入ioc,回调initailzer的initialize方法

      7.63 回调springApplicationListeners的contextPrepared方法

      7.64 回调springApplicationListener的contextLoad方法

 7.7 refreshContext(context):IOC容器初始化,调用父类的AbstractApplicationContext,加载所有的配置类、组件、bean

7.8 afterRefresh():从ioc容器中,获取ApplicationRunner(先回调)和CommandRunner(后回调)进行回调

7.9 所有的SpringApplicationRunner回调所有的finished方法

8.0 整个springboot应用启动完成后,返回ioc容器

二、代码实现以上这几种监听

1.ApplicationContextInitializer

2.SpringApplicationRunListener 这2种是配置在META-INF/spring.factories

3.ApplicationRunner

4.CommandRunner 这二种注入到ioc容器即可

三、springboot自定义场景启动器

1.Springboot的一个比较厉害的地方是,有众多的场景启动器,如下,引入场景启动器,Springboot就会自动的引入相关依赖,配置

2.自定义starters,自己写好starters,别人可以引用

   2.1 如何编写自动配置

       2.11 @Configuration //编写这个类是一个配置类

       2.12 @ConditionOnXXX //在指定条件成立的情况下自动配置类生效

       2.13 @AutoConfigurationAfter //指定自动配置类的顺序

       2.14 @Bean //给容器中添加组件

       2.15 @ConfigurationProperties结合相关XXXProperties类绑定相关的配置 //结合

      2.16 @EnableConfigurationProperties //让XXXProperties生效加入达到容器中

      自动配置加载:将需要启动加载的自动配置类,配置在META-INF/spring.factories

 3.模式

 启动器只用来做依赖导入,专门来写一个自动配置模块;

启动器依赖自动配置;别人只需要引入这个启动器;

      

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值