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下配置的

相关内容

热门资讯

三天两夜,在广州该怎么吃? 城市特色美食一定要试 最近,有市民察觉,广州不少好吃的餐厅、酒楼、美食街以及地铁线路突然...
原创 4... 夏天燥热缺水,很容易大便干结、肚子胀,这4道清淡吃法高纤补水,温和促肠道蠕动,便便顺畅,肠胃无负担。...
原创 南... 标题:南方年夜饭上的4种海鲜食品,虾蟹很常见,唯有它让人念念不忘! 在南方的年夜饭上,海鲜总是不可...
原创 花... 当乳白的花菜与绯红的番茄在锅中相遇,仿佛上演着一场味蕾的芭蕾。这道看似平常的家常菜,实则蕴藏着中国饮...
原创 别... 别小看葛根,懂的人都在喝,日常这样吃益处多,做法简单又实用 葛根是药食同源的好食材,性质平和,日常合...