SpringBoot


今天开始学习我自己总结的 Java-学习路线 中的《SpringBoot》,小简从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!<有同样想法的小伙伴,可以联系我一起交流学习哦!>

  • 🚩时间安排:预计10天更新完
  • 🎯开始时间:06-20
  • 🎉结束时间:06-xx
  • 🍀总结:

一、快速入门

1.创建Maven项目

参考:IDEA创建maven web工程

2.引入依赖

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.7.0</version>
</parent>

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

3.创建主程序

创建 /java/com/jianjian/boot/MainApplication.java

/**
 * 主程序类
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

@SpringBootApplication 注解相当于使用 @Configuration@EnableAutoConfiguration@ComponentScan 及他们的默认属性

  • @Configuration作为配置类替代xml配置文件

  • @EnableAutoConfiguration启用 SpringBoot 的自动配置机制

  • @ComponentScan 自动扫描所有 Spring 组件

4.编写业务

创建 ../java/com/jianjian/boot/controller/HelloController.java

@RestController
public class HelloController {
    @RequestMapping("/")
    public String home(){
        return "Hello, Spring Boot 2!";
    }
}

5.运行项目

直接运行主程序 MainApplication 中的 main 方法,访问 http://127.0.0.1:8080/,将会输出Hello, Spring Boot 2!

6.简化配置

创建 resources/application.properties 或者 resources/application.yml

server.port=8888

重新运行,浏览器输入http://localhost:8888,将会输出Hello, Spring Boot 2!

更多配置项请参考:Common Application Properties

7.简化部署

Spring Boot 包括了一个 Maven 插件,它可以将项目打包成一个可执行 jar

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.7.0</version>
    </plugin>
  </plugins>
</build>

点击 IDEA 右侧的 Maven ⇒ 点击生命周期 ⇒ 点击 clean ⇒ 点击 package,target 目录下就会生成 jar 包,执行如下命令即可运行 jar 包

java -jar springBoot-learn-1.0-SNAPSHOT.jar

二、项目优化

1.Lombok

简化JavaBean开发

引入 Lombok,用注解代替构造器、getter/setter、toString()等代码,新版 IDEA 已集成 Lombok 插件,无需下载

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>
  • @Data : 注在类上,提供类的get、set、equals、hashCode、toString等方法

  • @AllArgsConstructor :注在类上,提供类的全参构造

  • @NoArgsConstructor :注在类上,提供类的无参构造

  • @Setter :注在属性上,提供 set 方法

  • @Getter :注在属性上,提供 get 方法

  • @EqualsAndHashCode :注在类上,提供对应的 equals 和 hashCode 方法

  • @Log4j/@Slf4j :注在类上,提供对应的 Logger 对象,变量名为 log

//简化JavaBean开发
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
@Data
public class User {
    private String name;
    private Integer age;
}
//简化日志开发
@Slf4j
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handle01(@RequestParam("name") String name){
        log.info("请求进来了....");
        return "Hello, Spring Boot 2!"+"你好:"+name;
    }
}

2.Spring Initailizr

简化项目创建

Spring Initailizr是创建 Spring Boot 工程的脚手架,以后就创建 SpringBoot 项目就不用创建空白Maven项目,而是创建 Spring Initailizr 项目

在 IDEA 中,菜单栏 New -> Project -> Spring Initailizr,有如下优点:

  • 创建时可以选择我们需要的开发场景
  • 自动引入依赖
  • 自动创建项目结构
  • 自动编写好主程序类
  • 自动创建测试文件和配置文件

3.yaml

优化配置文件

YAML 是一种较为人性化的数据序列化语言 ,语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于数据结构方面的表达,所以 YAML 更多应用于编写配置文件,其文件一般以 .yml 为后缀。

yaml 非常适合用来做以数据为中心的配置文件。所以我们可以用 yaml 代替之前的 properties

基本语法

  • key: value
    • :”后有空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用 tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • ‘#’表示注释
  • 字符串无需加引号,如果要加:
    • 单引号表示字符串内容会被转义
    • 双引号表示字符串内容不会被转义

数据类型

  • 普通数据:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
行内写法:  k: {k1:v1,k2:v2,k3:v3}
#或
k: 
    k1: v1
  k2: v2
  k3: v3
  • 数组:一组按次序排列的值。array、list、queue
行内写法:  k: [v1,v2,v3]
#或
k:
 - v1
 - v2
 - v3

示例

@Data
public class Person {
    
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String, Object> score;
    private Set<Double> salarys;
    private Map<String, List<Pet>> allPets;
}

@Data
public class Pet {
    private String name;
    private Double weight;
}
# yaml表示以上对象
person:
  userName: zhangsan
  boss: false
  birth: 2019/12/12 20:12:33
  age: 18
  pet: 
    name: tomcat
    weight: 23.4
  interests: [篮球,游泳]
  animal: 
    - jerry
    - mario
  score:
    english: 
      first: 30
      second: 40
      third: 50
    math: [131,140,148]
    chinese: {first: 128,second: 136}
  salarys: [3999,4999.98,5999.99]
  allPets:
    sick:
      - {name: tom}
      - {name: jerry,weight: 47}
    health: [{name: mario,weight: 47}]

4.configuration-processor

配置提示

自定义的类和配置文件绑定一般没有提示。若要提示,添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>


<build>
  <plugins>
    <plugin>
      <configuration>
        <excludes>
          <exclude>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
          </exclude>
        </excludes>
      </configuration>
    </plugin>
  </plugins>
</build>

三、自动配置原理

依赖管理特性

ctrl + shift + alt + U:以图的方式显示项目中依赖之间的关系。

<!--依赖管理-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
</parent>

<!--上面项目的父项目如下:-->
<!--它几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.0</version>
</parent>
  • 开发时导入starter场景启动器

    • 见到很多 spring-boot-starter-* : *代表某种场景
    • 只要引入starter,这个场景的所有常规需要的依赖都自动引入
    • 见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
    • 所有场景启动器最底层的依赖:spring-boot-starter
    • 更多SpringBoot所有支持的场景
  • 无需关注版本号,自动版本仲裁

    1. 引入依赖默认都可以不写版本
    2. 引入非版本仲裁的jar,要写版本号
  • 可以修改默认版本号

    1. 查看 spring-boot-dependencies 里面依赖的版本
    2. 在当前项目里面重写配置,如下面的代码
<properties>
    <mysql.version>5.1.43</mysql.version>
</properties>

自动配置特性

  • 自动配置 Tomcat
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>2.7.0</version>
    <scope>compile</scope>
</dependency>
  • 自动配置SpringMVC
    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
    • 自动配好Web常见功能,如:字符编码问题
    • 配置好了所有web开发的常见场景
public static void main(String[] args) {
    //1、返回我们IOC容器
    ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

    //2、查看容器里面的组件
    String[] names = run.getBeanDefinitionNames();
    for (String name : names) {
        System.out.println(name);
    }
}

参考

Sponsor❤️

您的支持是我不断前进的动力,如果您感觉本文对您有所帮助的话,可以考虑打赏一下本文,用以维持本博客的运营费用,拒绝白嫖,从你我做起!🥰🥰🥰

支付宝 微信

文章作者: 简简
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简简 !
评论
填上邮箱会收到评论回复提醒哦!!!
 本篇
SpringBoot SpringBoot
今天开始学习我自己总结的 Java-学习路线 中的《SpringBoot》,小简从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!<有同样想法的小伙伴,可以联系我一起交流学习哦!> 🚩时间安排:预计
2022-06-15
下一篇 
SSM整合 SSM整合
今天开始学习我自己总结的 Java-学习路线 中的《SSM整合》,小简从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!<有同样想法的小伙伴,可以联系我一起交流学习哦!> 🚩时间安排:预计3天更新完
2022-05-26
  目录