SpringBoot自动装配原理

1
2
3
4
5
6
<!--web依赖:tomcat,dispatcherServlet,xml等,使用springmvc构建web,tomcat作为默认容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

自动装配原理

依赖

pom.xml的核心依赖在parent中,其中我们的许多的核心依赖都在其中

1
2
3
4
5
6
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

我们在引入的springboot依赖的适合,不需要写入版本

而在springboot中我们需要使用哪一种功能只需要引入哪一种start即可

主程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.zss.springbootdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* @author zss
*/
//标注这是一个springboot的启动应用
@SpringBootApplication
public class SpringBootdemoApplication {

public static void main(String[] args) {
//将springboot启动
SpringApplication.run(SpringBootdemoApplication.class, args);
}

}

我们进入到其中,查看他的注解形式

image-20220517161608830

1
@SpringBootConfiguration

当我们进入到@SpringBootConfiguration中时候可以发现其中的一个配置类@Configuration,这是表明我们spring的一个配置类

image-20220517161822495

1
@EnableAutoConfiguration

而对于@EnableAutoConfiguration,是自动导入配置的,当我们呢进入到其中,@AutoConfigurationPackage自动配置包的注解,而当我们再一次深入探究,@Import({AutoConfigurationImportSelector.class})导入选择器,

image-20220517162000179

image-20220517170838853

所以所springboot的所有自动配置都是在启动的时候进行了配置和加载,但是不一定生效,而是判断是否导入了相关的启动器。

SpringBoot配置文件

springboot的全局配置文件,配置名称是固定的,

application.properties–语法:key=value

application.yml–语法: key value

注意此时yml文件可以存储对象,虽然properties也可以存储对象,当时方法比较麻烦,当然也可以存储数组,对空格的要求非常高

image-20220518134637133

image-20220518134344668

对实体类进行赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
public Integer age;

public Student() {
}

public Student(String name, Integer age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
1
2
3
student:
name: zss
age: 20

image-20220518140058590

使用properties进行赋值

1
2
3
4
5
6
@Component
//在此处指定他的位置即可
@PropertySource(value = "classpath:zss.properties")
public class Student {
private String name;
public Integer age;

进行数据校验

我们在这里进行数据校验的时候,可以直接在后台判断结果是否合法

导入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

选择进行校验的属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.zss.springbootdemo.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;


/**
* @author zss
*/
@Component
@ConfigurationProperties(prefix = "student")
@Validated
public class Student {
@Email(message = "邮箱格式错误")
private String name;
public Integer age;

public Student() {
}

public Student(String name, Integer age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

image-20220518142147235

配置的顺序

SpringBoot配置文件——加载顺序 - CyberPelican - 博客园 (cnblogs.com)

img

如果在不同的目录中存在多个配置文件,它的读取顺序是:
1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml

在实际的开发应用中,我们拥有许多的环节,比如测试环境,生产环境等,我们可以在这里进行指定

springboot的多环境配置

1
2
3
4
#表示激活此环境
spring:
profiles:
active: test