Spring Boot实践教程(二):SpringApplication分析
2019独角兽企业重金招聘Python工程师标准>>>
本文会通过分析上一篇中跑起来的示例程序来分析一下Spring Boot程序运行的基本原理。
概要
在上一篇的介绍中,程序是通过SpringBoot1HelloworldApplication.main()
方法运行起来的:
public static void main(String[] args) {SpringApplication.run(SpringBoot1HelloworldApplication.class, args);
}
从代码中可以看到,通过SpringApplication.run
,这样一个静态方法,非常便捷地启动了一个Spring程序。SpringApplication
这个类实际上就是一个Spring Boot应用的起点,每一个Spring Boot的应用都会有一个类似的启动类,而run
方法的实际的作用是初始化了一个Spring容器的上下文。下面我们来分析一下这个简单的应用是如何启动起来的。
思考
按照以往使用Spring Framework的经验,初始化一个Spring容器,需要读取一些配置信息,但是在我们这个示例程序里面是没有做任何配置的,先看一下源码。
源码分析
从SpringApplication.run()方法一路追踪,看到下面的一个运行的过程:
上面的源码最下面的红框中在加载META-INF下面的spring.factories
文件,然后我们看到有很几个包里面都带这个文件,我们主要关注一下spring-boot-autoconfigure
这个包下面的。
大致内容示例如下:
可以看出,这个文件基本上都是定义一些Initializer
和Listener
这些定义都会在SpringApplication。run
启动的时候进行加载。这些内容加载之后有什么用呢,以上图中红框对应的org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
进行举例说明,先看一下该类的源码:
简单理解一下这个类上的几个注解:
- @Configuration 本类是一个Spring的配置类
- @ConditionalOnClass({ RabbitTemplate.class, Channel.class }) 类路径中有注解中的两个类则加载本配置
- @EnableConfigurationProperties(RabbitProperties.class) 加载注解类中对应的配置类
到这里我们大概就知道了这个spring.factories
配置文件其实就是定义了一些Spring启动需要的监听以及Spring Boot 启动是的默认配置,这样就能达到在不做任何配置的情况下,启用Spring Boot提供的默认配置来启动程序。
SpringApplication运行及自动配置总结
简单总结一下:
- 每个Spring Boot 程序都包括一个main函数来运行SpringApplication.run(),进行系统启动。(目前可以这么认为)
- 这个run方法里面会初始化一个Spring的容器,初始化的内容都在项目及各个jar文件的META-INF下面的
spring.factories
中定义的各个配置类、监听等等。 - 每个自动配置类都是基于条件进行加载的,即我们在项目中引入某些包之后,不添加配置或者少量必需配置后即可使用该包的功能。
欢迎关注我的微信公众号:
转载于:https://my.oschina.net/lsjcoder/blog/1585346
Spring Boot实践教程(二):SpringApplication分析相关推荐
- Spring Boot入门教程(二十八): 校验(validation)
validation主要是校验用户提交的数据的合法性,比如是否为空,密码是否符合规则,邮箱格式是否正确等等,校验框架比较多,用的比较多的是hibernate-validator, 也支持国际化,也可以 ...
- Spring Boot入门教程(二十五): Apache Shiro
1. pom.xml shiro并没有提供对应的Starter,而是使用的shiro-spring,其它的依赖都是辅助 <dependency><groupId>org.spr ...
- Spring Boot:(二)启动原理解析
Spring Boot:(二)启动原理解析 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏. ...
- springboot 创建地址_这可能是史上最易懂的 Spring Boot 入门教程
目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...
- spring boot高性能实现二维码扫码登录(中)——Redis版
前言 本打算用CountDownLatch来实现,但有个问题我没有考虑,就是当用户APP没有扫二维码的时候,线程会阻塞5分钟,这反而造成性能的下降.好吧,现在回归传统方式:前端ajax每隔1秒或2秒发 ...
- spring boot高性能实现二维码扫码登录(上)——单服务器版
前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...
- Spring Boot实践——Spring AOP实现之动态代理
Spring AOP 介绍 AOP的介绍可以查看 Spring Boot实践--AOP实现 与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改 ...
- Spring Boot入门教程(四十):微信支付集成-刷卡支付
分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...
- Spring Boot 基础教程:集成 Knife4j
前言 之前介绍了如何在 Spring Boot 中集成 Swagger2 和 Swagger3,对于我们日常的接口管理已经够用了.但是作为一个颜值党,无论是 Swagger2 还是 Swagger3, ...
最新文章
- debian 10 静态ip配置
- 2018微信年度数据报告:00后最爱表情捂脸哭 80后呲牙笑
- xcode8 matlab,Xcode8 iOS App上传详细流程
- nofollow标签_如何Nofollow外链
- CT一般扫描参数_CT图像质量参数
- Python 之 字典(dict)的创建、字典生成式、复制添加更新删除、查询遍历比较等
- SQL注入——判断注入
- 配置IDEA运行环境
- 西门子1200plc与施耐德变频器modbus通讯程序
- 硅谷华人天才CEO被开除,是否会有奇迹发生?
- 计算机主机放电操作,如何给主板CMOS放电的3种方法图文教程
- 微信公众号文章如何设置关键词自动回复链接
- linux 添加sbit权限,Linux特殊权限SUID、SGID、SBIT
- 南陵中学2021高考成绩查询,南陵中学举行2021届高三距高考200天动员大会
- tc ebpf sample - tethering offload on linux pc
- python多个文件夹合并成一个文件夹
- 音视频入门系列-音频篇(AAC)
- 高等工程热力学复习04
- 通过JS定义一个Iframe
- 3_使用seurat sct方法中的reference based处理大数据超过100000个细胞 science advance