springboot17:原理解析
admin
2024-01-28 23:48:51

1.starter原理解析

starter自动配置

  • 场景启动器(只说明当前场景的依赖),依赖中有一个某个环境的自动配置包(autoconfigure)
  • 自动配置包下能自动配置
    • 声明一个自动配置类
      @configuration 声明为一个自动配置类
      @EnableConfigurationProperties(放入配置类.class)
      开启属性文件绑定功能
      默认组件放入容器中
      • 内部@bean 方法类
    • 配置一个方法类(需要用配置类配置其内部属性)
      • 内部@autowired 配置类(获取配置类的属性)
    • 配置一个配置类(绑定配置文件中的“atguigu.hello的前缀”)
  • 别的项目引入场景启动器
    • 项目中默认读取类路径下META-INF/spring.factories中EnableAutoConfiguration的值即为项目启动后加载哪些自动配置类,使得项目启动加载指定的自动配置类
  • 只需要直接使用前面的方法类,可以直接调用类中的方法
  • 并且可以写一个配置属性 atguigu.hello.xxx=然后初始化类中的属性
  • 此时方法调用完整…

2.springboot原理

  • spring原理 springmvc原理 自动配置原理 springboot原理
  • springboot启动原理
  1. 创建springapplication
    1. 保存一些信息
    2. 判定当前应用类型(Servlet)
    3. 初始启动引导器没找到
    4. 去每个jar包的配置文件中的spring.factories找 ApplicationContextInitializer(初始化器找到了7个)
    5. 去每个jar包的配置文件中的spring.factories找ApplicationListener (应用监听器找到了9个)
    6. 保存这些组件到springapplication中
  2. 运行springapplication
    1. StopWach记录应用的启动时间
    2. 创建引导上下文环境:获取到所有之前的初始化启动引导器来完成对引导上下文的环境设置
    3. 让当前应用进入headless模式,自立更生模式
    4. 获取所有的runlistener运行监听器:获取的步骤是去spring.factories找。遍历所有获取到的runlistener,调用所有的starting方法(通知所有感兴趣系统启动过程的人,项目正在statring)
    5. 保存命令行参数
    6. 准备环境信息:返回或创建一个基础环境信息,配置环境信息,读取所有配置属性值,通知所有监听器当前环境准备完成,
    7. 创建IOC容器(createApplicationContext()),根据项目类型(Servlet)创建一个IOC容器 AnnotationConfigServletWebServerApplicationContext
    8. 准备IOC容器的基本信息
      1. 保存环境信息,IOC容器创建后的后置处理过程(准备类型转换器…)
      2. 应用初始化器,遍历所有的ApplicationContextInitializer调用initialize方法,来对IOC容器进行初始化的扩展工作,遍历所有的监听Listener,
      3. 所有的监听器调用contextLoaded
    9. 刷新IOC容器
      1. 创建容器中的所有组件(spring组件)
    10. 刷新完成容器后,所有监听器调用started方法
    11. 调用所有的runners:获取容器中的ApplicationRunner和另外一个Runner,合并所有Runner,并且按照order进行排序,遍历所有的runner调用run方法
    12. 如果以上有异常,监听器调用failed方法
    13. 没有异常,调用所有监听器的Listener的running方法
    14. running如果有问题,继续通知监听器listener的failed方法
    15. 返回IOC容器

3.自定义

  • ApplicationContextInializer
  • ApplicationListner
  • SpringApplicationRunListner
  • ApplivcationRunner@Component
  • CommadLineRunner@Component
  • 可以全部自定义并且继承类然后重写方法,判断什么时候执行
  • 注意除了标注解组件都是在所有jar包中的所有META-INF/spring.factories下配置的

相关内容

热门资讯

早安,北碚|露营就选云龟山 北碚的朋友们,早安!☀️ ▷ 今天是9月9日,星期三(农历七月廿八),23‑37°C。 当太阳缓缓沉...
带爸妈去了趟江西,三天走了两万... 带爸妈去了趟江西,三天走了两万多步 我爸无意中说了句“想去江西看看”,我就订了票。去之前我妈嘴上抱怨...
曲江暮色游线|芙蓉园、曲江池、... 十三朝古都长安的暮色从来不是城市退去喧嚣的转场,而是整座城最浪漫的序幕。西边的终南山收尽最后一缕橘色...
“语言在这一刻是多余的” (来源:中国旅游报) 转自:中国旅游报 外国游客体验芙蓉镇莓茶炒制过程  受访者 供图 □ 本报记...