SpringBoot详解
1、简介
什么是Spring
Spring是一个开源的框架,主要是用来简化开发流程
Spring是如何简化Java开发
- 基于POJO的轻量级和最小侵入性编程
- 通过IOC,依赖注入(DI)和面向接口实现松耦合
- 基于切面(AOP)和惯例进行声明式编程
- 通过切面和模板减少样式的代码
1.1、微服务
微服务是一种架构,他要求我们在开发应用的时候,这个应用必须构建成一系列小服务的组合:可以通过Http(rpc)的方式进行互通。
2、第一个SpringBoot程序
环境的依赖 java1.8、maven3.6.1,SpringBoot:最新版 IDEA
@RestController
public class Hello {
@RequestMapping("/hello")
public String getHello(){
return "Hello SpringBoot";
}
}
pom.xml
- spring-boot-dependencies:核心依赖在父工程里面
- 我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 启动器:说白了就是SpringBoot启动的场景
- 比如Spring-boot-srarter-web,他会帮助我们自动导入web环境所有的依赖
- SpringBoot会将所有的功能场景,都变成一个个的启动器
- 我们需要使用的功能,只需要找到他们的启动器便可以进行使用
主程序
@SpringBootApplication //标注这个类是一个Spring Boot类
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
常见的注解
@SpringBootConfiguration :表示Spring Boot的配置
@Configuration:表是Spring的配置类
@Component:说明这也是一个Spring的组件
@EnableAutoConfiguration:表示自动配置
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackageRegistrar.class):自动配置包注册
@Import(AutoConfigurationImportSelector.class):自动导入选择
结论:springBoot所有自动配置都是在启动的时候扫描并加载,Spring.factories所有的自动配置类都在这里面,但是不一定失效,要判断条件四否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效。然后就是配置成功!
- springBoot在启动的时候,从类路径下/META-INF/spring.factories获取指定值;
- 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
- spring boot现在将自动配置文件
- 整合jaavEE,解决方案和自动配置的东西都在spring-boot-autorconfigure-2.20.RELEASE.jar这个包下
- 他会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
- 容器中也会存在非常多的xxxautoConfiguration的文件,就是这些类给容器中导入这个场景所需要的组件并进行自动的配置,@Configuration ,javaConfig!
- 有了自动配置类,免去了手动编写配置文件的工作
SpringBoot谈谈自己的理解
- 自动装配
- run()方法,其所作的事情
- 推断应用的类型是普通的项目还是web项目
- 查找并加载所有可用的初始化器,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
3、给属性赋值的集中方式
3.1、配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
- application.properties
-
- 语法结构 :key=value
- application.yml
-
- 语法结构 :key:空格 value
**配置文件的作用 :**修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!
3.2、yaml概述
YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)
*这种语言以数据***作**为中心,而不是以标记语言为重点!
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
传统xml配置:
<server>
<port>8081<port>
</server>
yaml配置:
server:
prot: 8080
3.3、yaml基础语法
注:yaml的语法要求十分严格,必须按照其中的规范进行编写
- 空格不能省略
- 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
- 属性和值的大小写都是十分的敏感的
字面量:普通的值[数字、布尔值、字符串]
字面量直接写在后面的可以,字符串默认不用加上双引号或者是单引号
K:v
注意:
-
""双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思
例:name: “kuang shen” 输出 :kuang 换行 shen
-
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
例:name: ‘kuang shen’ 输出 :kuang shen
对象、map(键值对)
#对象、map格式
k:
v1:
v2:
#注:在使用的配置文件是yaml时,空格一定不能省略
student:
name: lisi
age: 3
行内写法
student: {name: lisi,age: 3}
数组
pets:
- cat
- dog
- pig
行内的写法
server:
port: 8081
yaml文件的强大在于,它可以给我们的实体类直接注入匹配的值
4、Spring boot的配置
yaml可以直接给实体类进行赋值
报红解决的办法
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
在pom.xml文件中添加上述的依赖
@ConfigurationProperties(prefix = “person”)的作用
-
将配置文件中配置的每一个属性的值,映射到组件之中;
-
告诉Springboot将本类中的所有属性和配置文件相关的配置进行绑定
-
参数prefix=”person“:将配置文件中person下面所有的属性一一对应
-
只有这个组件时容器中的组件,才能使用容器提供的ConfigurationProperties功能
yaml与properties的比较
- 松散绑定:指的是在yaml中的属性的名称可以与实体类中的属性名称不是完全的一样,但是也可以对其进行赋值
- JSR303数据校验,这个是我们可以在字段是增加一层过滤器,来保证数据的合法性
- 复杂类型的封装,yaml中可以封装对象,使用@value就不支持
结论
- 配置yaml课配置properties都可以获取到值
- 如果我们在某个业务中,只需要配置文件中的某个值的时候我们可以考虑曹勇value
- 如果说,我们专门编写了一个javaBean来和配置文件进行映射,就直接使用@