一、Spring Boot基本用法

1. 关于 pom.xml 文件说明

1.1 maven坐标说明

<!--项目maven的基本信息
    坐标:1.组ID 公司域名倒写
        2.项目名称 名称不能重复 不能数字开头
        3.项目版本
    坐标意义:
            1.主要用来用来管理/区分项目
            2.项目的打包路径就是坐标的位置.
-->
<groupId>com.jt</groupId>
<artifactId>springboot_demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_demo1</name>
<description>Demo project for Spring Boot</description>

1.2 maven 命令

常规用法:

  1. 配置maven环境变量
  2. 通过dos命令窗口执行命令(几乎不用)

IDEA插件方式:

  1. clean 清空项目编译之后的class文件(位于target目录中)
  2. install 将项目中的target中的class进行打包 xxx.jar包
    install时会将测试类一同打包,所以要注意代码正确性
  3. 跳过测试类打包
<properties>
     <java.version>1.8</java.version>
     <!--跳过测试类打包-->
     <skipTests>true</skipTests>
 </properties>

1.3 maven 打包没有生成target目录的说明

如果遇到上述问题,则需要去本地仓库中,根据项目路径查找jar包

1.4 parent 标签说明

<!--
    定位: SpringBoot主要的作用整合SSM,使得框架的使用更加简化
    原则: "开箱即用"
    parent主要的作用:
           1.SpringBoot在内部兼容了当下几乎所有的第三方框架
           2.SpringBoot官网已经将所有兼容的版本进行了定义
            (几乎解决了版本冲突问题)以后几乎不写版本号
    概括: parent标签中管理其他的项目版本信息.
-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.2</version>
    <relativePath/>
</parent>

1.5 dependency 说明

<!--原则: 按需导入  -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <!--springboot启动项(器)在包的内部SpringBoot
        已经完成了项目的"整合"(配置) 用户拿来就用
        web导入SpringMVC
        -->
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.6 插件说明

<!--SpringBoot项目与Maven整合的一个插件
    可以通过插件 执行项目打包/测试/文档生成等操作
    注意事项: 该插件不能省略
    项目发布时: java -jar xxxx.jar  报错:没有主清单信息!!!!
-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.5.2</version>
        </plugin>
    </plugins>
</build>

二、Spring Boot高级用法

1. 关于配置文件语法说明

1.1 properties 语法说明

#数据结构: KEY-VALUE
#数据类型: String类型/Number数值
#语法:    1.key-value使用=号连接
#        2.不需要添加多余的""号
#        3.pro文件在IDEA中的编码格式UTF-8(手动可改)
#          pro文件在被程序读取时默认采用ISO-8859-1格式,中文必定乱码
#        4.key=value不要出现多余的空格
server.port=8090

1.2 yml 语法说明

#数据结构 key-value
#数据类型 String/Number
#语法:
#    1.key:(空格)value
#    2.key与key之间有层级关系,注意缩进
#    3.字符编码都采用UTF-8
#    4.可读性较pro文件 更加友好
server:
  port: 8090

2. 属性赋值

2.1 业务需求

说明: 如果将数据直接写死到.java文件中,如果需要修改,则重新编译打包.不方便.如何优化??
优化: 通过配置文件动态为属性赋值!!!

@RestController
public class HelloController {
	private String day = "0.5天";
    @RequestMapping("getMsg")
    public String getMsg(){
        return "这个雨下几天:" + day;
    }
}

2.2 yml 文件为属性赋值

2.2.1 编辑yml配置文件

说明: Spring负责管理yml文件中的数据

# 数据结构: key-value
# 数据类型: String类型/Number数值
# 语法:
#      1. key:空格value
#      2. key与key之间有层级关系,注意缩进
#      3. 字符编码格式: utf-8
#      4. 可读性较pro文件更加便捷
server:
  port: 8091

#添加业务数据 Spring负责管理维护数据
user:
  day: 2天
2.2.2 Controller 为属性赋值
/**
 * 1. 接收用户发起的请求
 * 2. 响应用户JSON串的数据
 */
@RestController
@PropertySource(value = "classpath:/person.properties",encoding = "UTF-8")
public class HelloController {
//    private String day = "0.5天";
    /**
     * 从容器内部为属性赋值
     * 语法: spel表达式  ${key}
     */
    @Value("${user.day}")
    private String day;
    @Value("${person.name}")
    private String name;
    @RequestMapping("getMsg")
    public String getMsg(){
        return "这个雨下几天:" + day + name;
    }
}

2.3 properties 文件为属性文件赋值

2.3.1 需求说明

yml文件时Spring Boot的核心配置文件,一般用来整合其他第三方框架,如果将大量的业务数据放到yml文件中,不符合编码规范,所以将业务数据写道properties配置文件中.

2.3.2 准备 properties 文件

spring boot应用领域 spring boot用法_spring

2.3.3 编辑 Controller 文件
/**
 * 1.接收用户发起的请求
 * 2.响应用户JSON串数据
 *   1.@ResponseBody 可以将对象转化为JSON串
 *   2.如果返回值为String类型,则返回本身
 *   纠正: A.JSON串
 */
@RestController
//spring容器启动时,动态添加配置文件 一般需要修改字符集
//关于注解赋值:  1.必须满足key-value结构
//             2.如果属性只有一个并且是value属性,则可以省略不写
//             3.如果还是乱码则检查IDEA pro字符集编码格式
@PropertySource(value="classpath:/person.properties",encoding="UTF-8")
public class HelloController {
    /**
     * 规则:从Spring容器根据key获取数据,之后为属性赋值
     * 语法: spel表达式    ${key}
     */
    @Value("${user.day}")
    private String day;
    @Value("${person.name}")
    private String name;

    @RequestMapping("/getMsg")
    public String getMsg(){
        return "这个雨下几天:"+day+name;
    }
}
2.3.4 为属性赋值的意义
  1. 实现了 .java 文件与属性符字的解耦
  2. 为了实现特定的业务的赋值
  3. Spring Boot 整合第三方框架时,如果需要额外的配置文件时,常常采用上述的操作实现,方便扩展Redis为属性赋值操作

2.3 程序热部署

开发阶段: 码农编码环节,只对开发阶段有效
生产阶段: 甲方将项目上线使用

2.3.1 添加 jar 包
<!--支持热部署 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

2.3.2 IDEA配置

组合键: ctrl + shift + alt + / 或者 ctrl + alt + a

spring boot应用领域 spring boot用法_mybatis_02


勾选热部署:

spring boot应用领域 spring boot用法_spring boot_03

2.4 框架关系

spring boot应用领域 spring boot用法_spring boot_04

3.5 Spring 自动装配过程

3.5.1Spring"容器"

说明: Spring容器时在内存中的一大块的内存区域,寻出Spring管理对象
数据结构: KEY-VALUE 结构
数据类型: Map集合
Map详细说明: Key : 类型首字母小写 Value : 对象

3.5.2 依赖注入的原理
  1. 按照类型注入
    按照属性的类型,去Map集合中查找是否有该类型的对象,如果有则注入
  2. 按照名字注入,根据属性的name 去Map 集合中查找对应的KEY
@Autowired
 @Qualifier(value="李四")
  private SpringService springService;

自动装配的规则说明:

  1. 如果对象在进行实例化,如果对象中的属性被@Autowired注解修饰,则说明应该先注入属性
  2. 先根据属性的类型,查找Map集合中是否有该类型的对象
  3. 如果根据类型查找没有找到,则根据属性的名称按照name查找对象
  4. 如果上述的方式都没有找到,则报错实例化对象失败

原则:Spring容器中要求 接口必须单实现.如果有多实现则通过@Qualifier(“xxxx”)区分即可