1.SpringBoot简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
1.1pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
是所有依赖的父项目,来真正管理SpringBoot里面的所有依赖版本(SpringBoot的仲裁中心)
1.2导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter是SpringBoot的场景启动器,帮我们导入了web模块正常运行所依赖的组件,SpringBoot将所有的功能抽取出来做成一个个的starts(启动器),只需在项目引入这些starter相关场景的依赖都会导进来,要用什么功能就导入什么场景的启动器
主配置类
@SpringBootApplication //来标注一个主程序类,说明是一个SpringBoot应用
class HelloWorldApplication {
public static void main(String[] args) {
//Spring应用启动起来
SpringApplication.run(HelloWorldApplication.class,args);
}
}
@SpringBootApplication:标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就运行这个类的main方法q启动SpringBoot应用
点击进入@SpringBootApplication
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration //SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot的配置类
@EnableAutoConfiguration //开启自动配置功能,告诉我们SpringBoot开启自动配置功能,这样自动配置才能起作用
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration:这个注解标注在那个类上,说明此类是一个SpringBoot的配置类
@Configuration:配置类上来标注这个注解;配置类—–配置文件;配置类也是容器中的一个组件;@Component
点击进入@EnableAutoConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包;@Import({Registrar.class});Spring的底层注解,给容器中导入一个组件;导入的组件由Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面的所有子包里面的所有组件扫描到spring容器中
@Import({EnableAutoConfigurationImportSelector.class});给容器中导入组件;EnableAutoConfigurationImportSelector;导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景所需要的所有组件,并配置好这些组件==有了自动配置类,免去了我们手动编写配置注入功能组件等的工作==
1.3配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的:
application.properties
application.yml
配置文件的作用:修改SpringBoot自动配置的默认值
1.3.1YAML(YAML Ain’t Markup Language)
(1)基本语法:
k:(空格)v:表示一对键值对(空格必须有);以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的(属性和值也是大小写敏感的)
(2)值的写法:
字面量:普通的值(数字,字符串,布尔)k: v: 字面直接来写;
字符串默认不用加上单引号’’和双引号“”
“”双引号:不会转义字符串里面的特殊字符串;特殊字符串会作为本身想表示的意思name: “zhangsan \n list”:输出:
zhangsan
list
‘单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: ‘zhangsan \n list’:输出:
zhangsan \n list
对象(属性和值)(键值对);
对象、map(属性和值)(键值对):
k: v: 在下一行来写对象的属性和值的关系;注意缩进
对象还是K: v的方式
friends:
lastname: zhangsan
age: 20
行内写法:
friends: {lastname: zhangsan,age: 18}
注意冒号后面有空格
数组(List,Set)用值表示数组中的一个元素
pets:
- cat (杆+空格+值)
- dog
- pig
杆+空格+值
行内写法:
pets: {cat,dog,pig}
YAML配置实例:
server:
port: 8080
properties配置实例:
server.port=8080;
XML配置实例:
<server>
<port>8080</port>
</server>
1.3.2配置文件值的注入
person:
firstName: zhang
age: 18
boss: false
birth: 2019/11/23
maps: {k1: 15,k2: 12,k3: v3}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2
1.4JavaBean
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String firstName;
private int age;
private boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
将配置文件中配置的每一个值映射到这个组件中
@ConfigurationProperties:告诉SpringBoot经本类中的所有的属性和配置文件中相关的配置进行绑定
prefix = “person”:配置文件中那个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能让容器提供的@ConfigurationProperties功能
我们可以导入配置文件处理器,编写就有提示了
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
@Value获取值和@ConfigurationProperties获取值比较
ZXL | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEl | 不支持 | 支持 |
JSR303数据校验 | 支持(@Validated) | 不支持 |
复杂类型封装 | 支持 | 不支持 |