开箱即用:在开发过程中,通过maven项目的pom文件中添加相关依赖包,然后通过相应的注解来代替繁琐的XML配置以管理对象的生命周期。
从pom.xml中解读springboot的开箱即用原则。spring-boot-dependencies:作为父工程,存放了SpringBoot的核心依赖
好处- 我们在写或者引入一些SpringBoot依赖的时候,不再需要指定版本,因为SpringBoot的父依赖已经帮我们维护了一套版本。
- 在父依赖中也帮我们写好了资源库,不用我们自己再去配置了。
SpringBoot的项目都会存在一个父依赖,按住Ctrl+鼠标左键,可以点进去。
org.springframework.boot spring-boot-starter-parent2.2.1.RELEASE
点进去之后发现里面除了一些插件和配置文件的格式之外,还存在一个依赖。
org.springframework.boot spring-boot-dependencies2.2.1.RELEASE ../../spring-boot-dependencies
于是再点进去,可以发现里面放了很多的依赖和依赖的版本号。由于这个文件实在太长了,所以这里只展示一部分。
启动器为我们提供一键式启动场景true ${basedir}/src/main/resources **/application*.yml **/application*.yaml **/application*.properties ${basedir}/src/main/resources **/application*.yml **/application*.yaml **/application*.properties
org.springframework.boot spring-boot-starter2.2.1.RELEASE
启动器就是SpringBoot的启动场景,比如我们要使用web相关的,那么就直接引入spring-boor-starter-web,那么他就会帮我们自动导入web环境下所有必需的依赖。
我们来看看启动器中存放了一些什么内容:
以spring-boot-starter启动场景为例:
# 自动配置相关的依赖 org.springframework.boot spring-boot2.2.1.RELEASE compile # 日志相关依赖 org.springframework.boot spring-boot-autoconfigure2.2.1.RELEASE compile # Spring-core依赖 org.springframework.boot spring-boot-starter-logging2.2.1.RELEASE compile org.springframework spring-core5.2.1.RELEASE compile
其中存放了自动配置相关的依赖、日志相关依赖、还有Spring-core等依赖,这些依赖我们只需要导入一个spring-boor-starter就可以直接将其全部引入,而不需要再像以前那样逐个导入了。
SpringBoot会将所有的功能场景都封装成一个一个的启动器,供开发人员使用。
我们在使用的时候也可以直接去官网上找我们所需的启动器,直接将其引入。
获取启动器文档:
https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/using-spring-boot.html#using-boot-starter
如下图所示:
//@SpringBootApplication 标注,是一个SpringBoot应用 @SpringBootApplication public class SpringbootdemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootdemoApplication.class, args); } }
再写SpringBoot项目的时候,总要写这么一个主程序,这个主程序最大的特点就是其类上放了一个@SpringBootApplication注解,这也正是SpringBoot项目启动的核心,也是我们要研究的重点。
总结:当我们的SpringBoot项目启动的时候,所有的自动配置都进行了扫描并加载。spring.factories所有的自动配置类都在这里,但是不一定生效,要@ConditionalOnClass注解进行判断条件是否成立(只要导入相应的stater,条件就能成立),只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功了。从以上思维导图的源码探究中,我们验证了主程序的自动装配原理。
梳理注解@SpringBootApplication自动装配的过程- SpringBoot在启动的时候从类路径下的meta-INF/spring.factories中获取
- 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
- 以前我们需要自己配置的东西 , 自动配置类都帮我们解决了!
- 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
- 它将所有需要导入的组件以全类名的方式返回 , 这些组件就会被添加到容器中 ;
- 容器中存在非常多的xxxAutoConfiguration的文件(@Bean), 就是这些类给容器中导入这个场景需要的所有组件,并配置好这些组件 ;@Configuration,JavaConfig!
- 有了自动配置类 , 免去了我们手动编写配置文件的工作。
摘自博客:
https://link.zhihu.com/?target=https%3A//blog.kuangstudy.com/index.php/archives/630/
1、推断应用的类型是普通的项目还是Web项目
2、查找并加载所有可用初始化器 , 设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
查看构造器:
public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) { // ...... this.webApplicationType = WebApplicationType.deduceFromClasspath(); this.setInitializers(this.getSpringFactoriesInstances(); this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class)); this.mainApplicationClass = this.deduceMainApplicationClass(); }run方法流程分析
引自kuangshen笔记
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties
语法结构 :key=value
application.yml
语法结构 :key:空格 value
**配置文件的作用 :**修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!
server.port=8081yaml概述
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
注意:
1.“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: “kuang n shen” 输出 :kuang 换行 shen
2.’’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘kuang n shen’ 输出 :kuang n shen
对象、Map(键值对)
#对象、Map格式 k: v1: v2:
在下一行来写对象的属性和值得关系,注意缩进;比如:
student: name: qinjiang age: 3
行内写法
student: {name: qinjiang,age: 3}
数组( List、set )
用 - 值表示数组中的一个元素,比如:
pets: - cat - dog - pig
行内写法
pets: [cat,dog,pig]
注入配置文件
yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!
演示步骤及其效果见以下链接
yaml绑定实体类示范链接
总结:
yaml无论语法上,还是属性注入,还是配置文件的书写/关联方面,都全面优秀于properties文件格式。这是springboot极力推荐它的原因!
自动配置原理再理解进阶
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)