SpringBoot run方法原理

SpringBoot通过主程序的Main方法启动,main程序中通过SpringApplication的run方法去启动整个SpringBoot程序

 一,SpringApplication run方法

 静态的run方法中重载到了另外一个run方法中,第一步去实例化了SpringApplication对象,传入参数为main方法所在类class对象,然后利用实例化好的SpringApplication对象去执行run方法。

 二,SpringApplication的实例化

 1,将项目启动类进行存储

 2,应用类型的判断(枚举类WebApplicationType)

前面两种类型不说,因为使用了SpringMVC,Spring应用层面上的框架,前端去请求controller,那么就会用到DispatcherServlet,那么一定会有WebApplicationType.SERVLET类型的类出现。

 3,设置初始化器 

设置初始化器的参数为getSpringFactoriesInstances的返回结果,那么直接跟踪这个方法即可,该方法的参数传入了一个ApplicationContextInitializer类的Class对象

 同样是调用重载的方法,首先会去获取一个类加载器,然后把传入的class对象,还有刚刚实例化好的类加载器传入到loadFactoryNames方法中去,并返回一个容器对象。

 然后会发现又回到了这个方法中去加载spring.factories,而传入的ApplicationContextInitializer类的class对象,就是去判断加载,放入到集合中,set去重复

 4,设置监听器

这里和上面是调用的同样的一个方法,也是去Spring.factoris中去找这个类,然后去实例化返回。

 5,初始化 mainApplicationClass属性

 三,SpringApplication的run方法

1,执行计时器,上下文异常报告集合初始化.... 

2,获取监听器  && 创建Arguments对象实例化初始化配置信息

这里还是和之前一样,去Spring.factoris中实例化SpringApplicationRunListener对象。

 3,运行环境的预配置

将第二步实例化的监听对象与默认配置Argument对象传入,实例化ConfigurabeEnvironment环境对象,绑定监听与配置属性,绑定运行环境并返回。

 4,创建Spring容器

这里的applictionContextClass有可能为NULL,为Null则会进行判断,类型的问题上面有提到过,一定会是一个Servlet类型,创建一个class字节码对象,然后传入创建一个ApplicationContext对象并且返回,到这里为止Spring容器创建成功。 

 5,Spring的前置处理

这里因为篇幅问题着重去看load方法,它会去加载启动类成BeanDefinition。

 6,刷新容器

首先会对实例化完成的ApplicationContext进行刷新,然后去注册一个钩子--即一个方法。这里比拟的是如果JVM关闭了,那么这些容器中的内容也可以被销毁了。

7,后置处理

afterRefresh方法中并没有操作,这里是方便开发人员做一些后置的操作。

 

 8,发出执行的事件通知

 9,执行Runners

用于执行项目中自定义的执行器,当程序启动完成默认执行一次。从callRunners中可以发现,如果要去自定义执行类,我们只需要去实现ApplicationRunner和CommandLineRunner接口即可。

 10,发布上下文就绪事件并返回容器

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文档内容 一、 Spring介绍 1 1.1、SpringBoot简介 1 1.2、系统要求: 1 1.3、SpringBootSpringMVC区别 1 1.4、SpringBootSpringCloud区别 2 1.5常见错误 2 二、快速入门 2 2.1、创建一个Maven工程 2 2.2、pom文件引入依赖 3 2.3、编写HelloWorld服务 3 2.4、@RestController 4 2.5、@EnableAutoConfiguration 4 2.6 SpringApplication.run(HelloController.class, args); 4 2.7、SpringBoot启动方式1 4 2.8、SpringBoot启动方式2 4 2.9、SpringBoot启动方式3 5 三、 Web开发 5 3.1、静态资源访问 5 3.2、渲染Web页面 5 3.3、使用Freemarker模板引擎渲染web视图 6 3.3.1、pom文件引入: 6 3.3.2、后台代码 6 3.3.3、前台代码 6 3.3.4、Freemarker其他用法 7 3.3.5、Freemarker配置 8 3.4、使用JSP渲染Web视图 8 3.4.1、pom文件引入以下依赖 8 3.4.2、在application.properties创建以下配置 9 3.4.3、后台代码 9 3.5、全局捕获异常 10 四、 数据访问 10 4.1、springboot整合使用JdbcTemplate 10 4.2、springboot整合使用mybatis 12 4.3、springboot整合使用springjpa 18 4.4、springboot整合多数据源 19 五、 事物管理 25 5.1.1SpringBoot整合事物管理 25 5.1.2SpringBoot分布式事物管理 25 六、 日志管理 30 6.1使用log4j记录日志 30 6.2使用AOP统一处理Web请求日志 32 6.3Spring Boot集成lombok让代码更简洁 33 七、 缓存支持 35 7.1注解配置与EhCache使用 35 7.2使用Redis集成缓存 37 八、 热部署 37 8.1 什么是热部署 37 8.2 项目演示案例 37 8.3 热部署原理 37 8.4 Devtools依赖 38 8.5 Devtools原理 38 九、 监控管理 38 Actuator监控应用 38 Maven依赖 38 YML配置 39 Actuator访问路径 40 Admin-UI分布式微服务监控中心 40 Admin-UI-Server 40 Admin-UI-Client 41 十、 性能优化 43 组件自动扫描带来的问题 43 将Servlet容器变成Undertow 44 SpringBoot JVM参数调优 44 十一、 2.0版本新特性 45 以Java 8 为基准 45 内嵌容器包结构调整 45 Servlet-specific 的server properties调整 45 Actuator 默认映射 46 Spring Loaded不再支持 46 支持Quartz Scheduler 46 OAuth 2.0 支持 46 支持Spring WebFlux 46 版本要求 46 十二、 其他内容 47 12.1、使用@Scheduled创建定时任务 47 12.2、使用@Async实现异步调用 47 12.3、自定义参数 49 12.4、多环境配置 50 12.5、修改端口号 50 12.6、SpringBoot yml 使用 50 12.7、SpringBoot整合拦截器 51 12.8、发布打包 52

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值