1springboot根据类型进行deduce判断,类型是写死的servlet或者reactive
细节 :根据反射拿classname,用指定的classloader从classpath 依赖的Jar包中加载类
扫描各个jar包下的meta-inf下面的spring.factorys
2setInitializers
在spring容器初始化的时候 扫描所有Jar包的spring.factorires得到propertys的配置然后暂存到map里
这步很重要,跑完后会得到一堆上下文类,假如第三方也想假如springboot比如dubbo,那么dubbo要在initializers里加入一些动作
3setListeners
容器发生事件的时候被回调
扫描到各个框架实现的listener
4deduceMainApplicationClass
遍历所有类,拿到包含Main的类
5创建上下文
这块感觉猝不及防的就创建上下文了,而且是调用接口,接口里面用switch case判断来创建不同的对象
AnnotationConfigServletWebServerApplicationContext这个对象就创建出来了。这块是springboot启动前做的准备操作
6 prepareContext里面执行applyInitializers,这个initializers就是之前第2步得到的initalizers
另外有个思路,因为applicationContextInitializer是个接口,那么我们也可以自己写一个类实现这个接口,然后启动就会调用到。
很多第三方框架也是在annotionConfigApplicationContext里面加入 beanpostfactoryPostProcessor就是bean后处理器,然后系统启动就可以加载到第三方框架了。
只要实现ApplicationContextInitializer接口的类,在执行initializer.initialize(context);的时候都会调用到,要么是bean后处理器要么是监听器,在某个时刻触发
比如applicatonListener 自动装配 webserver相关jetty