SpringBoot学习笔记

1. springboot启动顺序

@SpringBootApplication

  • 创建SpringApplication
    • 保存一些信息
    • 判定当前应用类型ClassUtils servlet
    • bootstrappers初始启动器,找spring.factories文件的Bootstrapper
    • 去spring.factories文件找ApplicationContextInitializer
    • 去spring.factories文件找ApplicationListener应用监听器
  • 运行SpringApplication
    • StopWatch记录应用启动时间
    • 创建引导上下文(Context环境)
      • 获取到所有之前创建时的bootstrappers,并挨个执行initializer()
    • 让当前应用进入headless模式。java.awt.headless
    • 获取所有RunListener 运行监听器
      • getSpringFactoriesInstances去找spring.factories找SpringApplicationRunListener
    • 遍历SpringApplicationRunListener调用starting
      • 以上操作相当于通知所有感兴趣系统正在启动过程的人,项目正在启动
    • 保存命令行参数ApplicationArguments
    • 准备环境prepareEnvironment
    • 创建IOC容器(createApplicationContext())
      • 根据项目类型servlet创建容器AnnotationConfigServletWebServerApplicationContext
    • 准备IOC容器的基本信息ApplicationContext
      • 环境信息
      • 后置处理流程
      • 应用初始化器applyInitializers
        • 遍历所有的ApplicationContextInitializer,并调用initialize()。来对IOC容器初始化扩展
        • 遍历所有的ApplicationListener,通知contextPrepare结束
      • 所有监听器 调用contextLoad 结束
    • refresh刷新IOC容器
      • 创建容器中的所有组件(同spring启动)
    • afterResresh
    • 所有监听器调用started
    • 调用所有的runners;callRunners()
      • 获取容器中的ApplicationRunner
      • 获取容器中的CommandLineRunner
      • 合并runner并按@Order排序
      • 遍历调用run
    • 如果以上有异常,调用listener的failed
    • 调用所有监听器的running方法

2. 优点

  • 创建独立的spring应用
  • 内嵌web服务器
  • 自动starter一栏
  • 自动配置spring及第三方功能
  • 生产级监控和健康检查
  • 无代码生成、无需编写xml
  • 遵循“习惯优于配置”的原则,使用Spring Boot只需要很少的配置,大部分的时候我们直接使用默认的配置即可;

3.热部署

修改的是.java文件,即使点一下编译,将.class文件修改。但是IOC已经初始化完成,该.class文件已经加载到 JVM 中了。而且 JVM 是懒加载的,方法区中的 class 正常情况下是不会写在的。

如果是自定义类加载器,class 就可以卸载

在springboot 里可以直接依赖 devtools包就可以实现热部署了。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

底层实现:

文件监听:监听某一个路径下的文件 -> 使用循环比对(死循环比 大小、修改日期) -> 如果变了,使用 一个新的自定义加载器重新加载(new MyClassLoader)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值