springboot启动流程
2022-03-09 17:09:29 0 举报
springboot启动流程图
作者其他创作
大纲/内容
初始化
(1)进入待处置列表时(包含登记审批通过以及待签收接收完成后)
(2)立案登记(直接登记立案登记后)
5
sendLzdaMaMsg(List<LzdaMsg>lzdaMsg) 发送消息方法
调用发送消息方法
4
廉政档案监听消息
设置系统属性,保证某些bean不会加到准备的环境中spring.beaninfo.ignore
创建上下文应用对象,根据当前应用程序的类型来判断创建什么格式的上下文对象context = createApplicationContext();
new SpringApplication()
执行staring()方法
加载所有的初始化容器
此处在看到创建上下文的对象之后一定要看类图,在父子关系的类中完成了很多初始化操作,容易忽略GenericApplicationContextDefaultListableBeanFactory
9
根据反射获取的得到具体的实体类
listeners.contextLoaded(context);
准备banner的打印Banner printedBanner = printBanner(environment);
(3)各阶段办结时(处置、谈话、初核)
根据传入的类名(key)得到需要的工厂集合的实例
12
匹配不同类型的事件,然后从所有的监听器中把不符合的监听器给过滤掉
注册listenersSpringApplicationRunListeners listeners = getRunListeners(args)
设置初始化进行执行,向beanfactory中注入了三个postprocessor的对象,后续在自动装配的时候会用到applyInitializers(context);
11
配置系统属性java.awt.headless,意义不大可忽略。configureHeadlessProperty();
开始运行run()方法
1
读取banner.txt文件中的内容
记载spring.factories文件中的内容
判断当前应用程序的类型SERVLETNONEREACTIVE
this.initialMulticaster .multicastEvent()
每次监听器在实际做操作的时候会调用listener.*()方法
2
加载所有的监听器
循环打印输出默认的banner
加载命令行的参数值,解析在命令行中通过--key=value(arg.startsWith(\"--\"))输入的属性值,封装到ApplicationArguments对象中SimpleCommandLinePropertySource(String... args)
SpringApplication启动
开启计时器long startTime = System.nanoTime()设置当前任务的id和启动时间,方便后续的进行计算
14
10
办案系统
找到程序运行的主类mainApplicationClass
3
符合条件的监听器会执行自己的具体的逻辑
获取文件中对应类的全路径
通过getSpringFactoriesInstances()方法获取一个EventPublishingRunListener对象,将application的11个监听器给到了当前对象,该对象会贯穿整个应用程序的启动过程,每次在监听器操作的时候会从中取出具体的监听器。
刷新上下文环境(关键操作)重点在spring的时候会讲到refreshContext(context);完成自动装配和tomcat的启动
获取或创建一个环境,根据当前类型来判断ConfigurableEnvironment environment = getOrCreateEnvironment();
6
计时结束,打印启动程绪 运行的时长Duration timeTakenToStartup = Duration.ofNanos(System.nanoTime() - startTime);
staring()
listeners.contextPrepared(context);
此处做切面去拦截各个目标方法,然后调用发消息方法。
13
getSpringFactoriesInstances
8
7
收藏
0 条评论
下一页