SpringBoot学习笔记 (图文详解)

快速搭建SpringBoot工程

搭建工具:IDEA

目标:创建Controller,在网页输出 “hello controller!”

(1) 新建项目: File -> New -> Project
SpringBoot学习笔记 (图文详解)_第1张图片

(2) 按照图中选择文件类型,点击Next

注意:该创建项目的前提下是需要联网
SpringBoot学习笔记 (图文详解)_第2张图片
(3) 为目标文件编辑相关信息,可参考下图
SpringBoot学习笔记 (图文详解)_第3张图片
(4) 选择Web ->Spring Web
SpringBoot学习笔记 (图文详解)_第4张图片
(5) 文件进行加载,加载后目录如下图所示
SpringBoot学习笔记 (图文详解)_第5张图片
(5) 点击右上角运行图标,若出现下列图标,说明启动没有问题
SpringBoot学习笔记 (图文详解)_第6张图片

(6) 在 com.example.demo 包下新建 HelloController.java文件,编辑代码
SpringBoot学习笔记 (图文详解)_第7张图片
代码如下:

package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("hello")
    public String hello(){
        return "hello controller!";
    }
}

(7) 在任意一个浏览器输入 http://localhost:8080/hello,运行结果如图所示

SpringBoot学习笔记 (图文详解)_第8张图片

SpringBoot起步依赖原理分析

spring-boot-starter-parent:

  • 在 spring-boot-starter-parent 中定义了各种技术的版本信息,组合了一套最优搭配的技术版本
  • 在各种 starter 中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自父工程
  • 工程继承 parent ,引入starter后,通过依赖传递,就可以简单方便的获得需要的jar包,并且不会存在版本冲突问题。

SpringBoot 配置

配置文件分类:

SpringBoot是基于约定的,很多配置都有默认值,可以使用 application.properties 或者 application.yml ( application.yaml ) 进行配置。以默认的端口号为例,properties 和 yml 代码如下

(1)properties:

server.port = 8080 

(2)yml:(注意,port 和 8080之间有空格,且必须)

server:
  port: 8080

YAML语法

特点: 简洁,以数据为中心
(1)YAML语法如下:

  • 使用缩进表示层级关系
  • 缩进时只允许使用空格键,空格数量无所谓,但同级元素必须左侧对齐
  • 数据值前面必须有空格,作为分隔符
  • 大小写敏感

YAML数据格式

(1)对象(map):键值对的集合
注意:行内写法person与大括号之间有空格,括号内namezhangsan之间有空格

person:
    name: zhangsan 
#行内写法
person: {name: zhangsan}

(2)数组:一组按次序排列的值,使用 “-”表示数组每个元素

address:
   -  beijing
   -  shanghai
 #行内写法
 address: [beijing,shanghai]

(3)纯良:单个的,不可再分的值

msg1:  'hello \n world'  #单引号忽略转义字符
msg2:  "hello \n world"  #双引识别转义字符

(4)参数引用:$()

name: lisi
person:
  name: $(name) #引用上边定义的name值

代码演示

(1)在resources文件夹下创建application.yaml文件,编辑代码,如图所示:
SpringBoot学习笔记 (图文详解)_第9张图片

SpringBoot配置 — 获取数据

读取配置内容

需要掌握的知识点如下:

  • @Value:获取单个值。
  • Environment: 当属性较多,单个获取不方便时,可以使用Environment批量获取。
  • @ConfigurationProperties: 因为@Value获取将会产生很多重复的代码,Environment获取需要封装,此时我们可以使用ConfigurationProperties,一个SpringBoot已经封装好的注解。

数据读取

@Value 用例

(1) 首先,打开HelloController文件,编辑代码如图所示。
SpringBoot学习笔记 (图文详解)_第10张图片(2)在网页输入http://localhost:8080/hello2,若是没有运行点击刷新,运行结果如下所示:
SpringBoot学习笔记 (图文详解)_第11张图片

(3)上述这是对于普通的变量name进行的演示,若要使用@Value获取对象,数组或纯量,HelloController的代码和运行结果如下所示:

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @Value("${name}")
    private String name;
    //对象使用
    @Value("${person.name}")
    private String name2;
    //数组取值: 用中括号取他们的角标
    @Value("${address[0]}")
    private String address1;
    //纯量
    @Value("${msg1}")
    private String msg1;
    @Value("${msg2}")
    private String msg2;
    @RequestMapping("hello2")
    public String hello2(){
        //验证,输出数据
        System.out.println(name);
        System.out.println(name2);
        System.out.println(address1);
        System.out.println(msg1);//不会识别转义字符\n,会原样输出
        System.out.println(msg2);//会识别转义字符
        return "hello world!";
    }
}

运行截图如下:
SpringBoot学习笔记 (图文详解)_第12张图片

Environment 用例

(1)EnvironmentEnvironmentimport org.springframework.core.env.Environment包下的。
(2)Environment对数组和对象的使用过程在HelloController的核心代码如下所示:

@RestController
public class HelloController {
    @Autowired
    private Environment env;
    @RequestMapping("hello2")
    public String hello2(){
        //要用getProperty()获取属性
        System.out.println(env.getProperty("person.name")); //对象
        System.out.println(env.getProperty("address[0]"));
        return "hello world!";
    }
}

运行结果如下:
SpringBoot学习笔记 (图文详解)_第13张图片

@ConfigurationProperties 用例

(1)针对application.yaml(配置文件)中的person对象为例,先在包下新建Person
SpringBoot学习笔记 (图文详解)_第14张图片其中,Person类中核心代码如下:

@Component //表示下面这个Person类被spring所识别
@ConfigurationProperties(prefix = "person")//prefix 是前缀
public class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

(2)新建Person类后,在HelloControlle中运行测试。其中HelloController.java的核心代码如下:

@RestController
public class HelloController {
    @Autowired
    private Person person;
    @RequestMapping("hello2")
    public String hello2(){
        System.out.println(person); //输出对象
        return "hello person!";
    }
}

运行结果如图所示:
SpringBoot学习笔记 (图文详解)_第15张图片

补充(3):上面那个红条的bug修复,只是用于提示,并不影响运行,但是也可以去除,方法如下:
首先点击按钮如下:
在这里插入图片描述
自动跳转页面如下,补充依赖,加到pom.xml文件中去SpringBoot学习笔记 (图文详解)_第16张图片

SpringBoot配置-profile

profile: 我们在开发SpringBoot应用时,通常同一套程序会被安装到不同环境,比如开发,测试,生产等。其中数据地址,服务器端口等等配置都不同,比如每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。
1)profile配置方式

  • 多profile文件方式:提供多个配置文件,每个代表一种环境
    • application-dev.properties/yml 开发环境
    • application-test.properties/yml 测试环境
    • application-pro.properties/yml 生产环境
  • yml多文档方式:
    • 在yml中使用——分隔不同配置

2)profile 激活方式

  • 配置文件:在配置文件中配置:spring.profiles.active = dev
  • 虚拟机参数:在VM options指定:-Dspring.profiles.active = dev
  • 命令行参数: java-jar.xxx.jar --spring.profiles.active = dev

内部配置加载顺序

Springboot程序启动时:会从以下位置加载配置文件:

  1. file:…/config/ : 当前项目下的/config目录下
  2. file:…/ : 当前项目的根目录
  3. classpath:/config/ : classpath的/config目录
  4. classpath :classpath的根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效

演示

以下是可以设置配置文件的位置:
(1)上述第4个加载文件位置如下图:
SpringBoot学习笔记 (图文详解)_第17张图片
(2)上述第3个配置文件首先需要在resources文件夹下建立config包,其次需要在该包下建立application.properties文件:
SpringBoot学习笔记 (图文详解)_第18张图片
(3)上述第2个配置文件 首先需要如下图Project—> Project Files, 其次建立application.properties文件(也可以直接复制在下面)SpringBoot学习笔记 (图文详解)_第19张图片

(4)上述第1个配置文件首先如上图roject—> Project Files,其次在下面建立config包在建立application.properties文件

SpringBoot原理分析

SpringBoot自动配置——Condition

(1)Condition:Condition是在Spring 4.0 增加的条件判断功能,通过这个功能可以实现选择性的创建Bean操作。

你可能感兴趣的:(#,SpringBoot系列,spring,boot,intellij-idea,java)