01_SpringBoot_入门

笔记

入门

简介

Spring Boot 来简化 Spring 应用开发,约定大于配置去繁从简,just run 就能创建一个独立的,产品级别的应用。

简化 Spring 应用开发的一个框架;

整个 Spring 技术栈的一个大整合;

J2EE 开发的一站式解决方案;

Spring Boot 对于 Spring 的再次封装

  • 背景

    J2EE 笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。

  • 解决

    “Spring 全家桶”时代。

    Spring Boot --> J2EE 一站式解决方案 --> Spring Cloud 分布式整体解决方案

    image-20200617025519819

  • 优点

    • 快速创建独立运行的 Spring 顶目以及与主流框架集成

    • 使用嵌入式的 Servlet 容器,应用无需打成 WAR 包

    • starters 自动依赖与版本控制

    • 大量的自动配置,简化开发,也可修改默认值

    • 无需配置 XML,无代码生成,开箱即用

    • 准生产环境的运行时应用监控

    • 与云计算的天然集成

历史回顾

事实上,在 Spring 3.0 开始,Spring 官方就已经开始推荐使用 Java 配置来代替传统的 XML 配置了,我们不妨来回顾一下 Spring 的历史:

  • Spring 1.0

    在此时因为 JDK 1.5 刚刚出来,注解开发并未盛行,因此一切 Spring 配置都是 XML 格式,想象一下所有的 bean 都用 XML 配置

  • Spring 2.0

    Spring 引入了注解开发,但是因为并不完善,因此并未完全替代 XML,此时的程序员往往是把 XML 与注解进行结合

  • Spring 3.0

    Spring 3.0 以后 Spring 的注解已经非常完善了,因 Spring 推荐大家使用完全的 Java 配置来代替以前的 XML,不过似乎在国内并未推广行。然后当 SpringBoot 来临,人们才慢慢认识到 Java 配置的优雅。

有句古话说的好:拥抱变化,拥抱未来。所以我们也应该顺应时代潮流,做时尚的弄潮儿,一起来学习下 Java 配置的玩法。

微服务

微服务文档arrow-up-right

2014 martin fowler

微服务:架构风格

一个应用应该是一组小型服务;可以通过 HTTP 的方式进行互通

单体应用:ALL IN ONE;

image-20200617025458404
image-20200617025422101

环境约束

安装环境约束

  • JDK 1.8(Spring Boot 1.7 及以上;java version "1.8.0_112")

  • Maven 3.3(Maven 3.3 以上版本;Apache Maven 3.3.9)

  • Interllij IDEA 2017: Interllij IDEA 2017.2.2 X64, STS

  • Spring Boot 1.5.9 RELEASE: 1.5.9

Maven 配置文件约束

创建 Spring Boot 工程

Maven 依赖导入

  1. 创建普通Maven工程(jar)

  2. 导入依赖 Spring Boot 相关的依赖

  3. 编写主程序 启动 Spring Boot 应用

  4. 编写相关的Controller、Service

    以下两种方法作用等同

    • @Controller

    • @RestController

  5. 运行主程序测试

  6. 简化部署

使用 Spring Initializer 快速创建 Spring Boot 项目

IDE 都支持使用 Spring 的项目创建向导快速创建一个 Spring Boot 项目

选择我们需要的模块;向导会联网创建 Spring Boot 项目

默认生成的 Spring Boot 项目

  • 主程序已经生成好了,我们只需要我们自己的逻辑

  • resources 文件夹中目录结构

    • static:保存所有的静态资源;js css Images

    • templates:保存所有的模板页面(Spring Boots 默认 jar 包使用入式的 Tomcat,默认不支持 JSP 页面)

      • 可以使用模板引

        • freemarker

        • thymeleaf

    • application.properties:Spring Boot 应用的配置文件,可修改默认配置

  1. 创建项目时选择Spring Initializr

    如无法完成则手动上 Spring Initializer Webarrow-up-right 完成初始化操作,后导入idea

    创建项目时选择Spring Initializr

  2. 完善项目信息

    完善项目信息

  3. 选择需要的starter

    idea03

  4. 创建完成后 不要的文件可以删除

    1573641023432

POM 研究

  1. 父项目

    Spring Boote 的版本仲裁中心

    以后我们导入依赖默认是不需要写版本;(没有在 dependencies 里面管理的依赖自然需要声明版本号)

  2. 导入依赖

    • spring-boot-starter-web

      • spring-boot-starter:spring-boot 场景启动器;帮我们导入了 web 模块正常运行所依赖的组件;

    Spring Boot 将所有的功能场景都抽取出来,做成一个个的 starters(启动器),只需要在项目里面引入这些 starter 相关场景的所有依赖都会导入进来。(版本由Spring-Boot自动控制)要用什么功能就导入什么场景的启动器。

    • spring-boot-starter-test SpringBoot集成junit测试的起步依赖

    • 主程序类,主入口类

    @SpringBootApplication: Spring Boot 应用标注在某个类上说明这个类是 Spring Boot 的主配置类,Spring Boot 就应该运行这个类的 main 方法来启动 Spring Boot 应用

    • @SpringBootConfiguration: Spring Boot 的配置类;

      • 标注在某个类上,表示这是一个 Spring Boote 的配置类

      • @Configuration:配罩类上来标注这个注解

      • 配置类 ---- 配置文件; 配置类也是容器中的一个组件;@Component

    • @EnableAutoConfiguration: 开启自动配置功能;

      • 以前我们需要配置的东西,Spring Boot 帮我们自动配置;@EnableAutoConfiguration 告诉 Spring Boot 开启自动配置功能;这样自动配置才能生效

    • @AutoConfigurationPackage: 自动配置包

      • @Import(AutoConfigurationPackages.Registrar.class): Spring 的底层注解@Import,给容器中导入一个组件;导入的组件 AutoConfigurationPackages.Registrar.class 提供

      • 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到 Spring 容器;

    • @Import(EnableAutoConfigurationlmportSelector.class)

      • 给容器中导入组件?

      • EnableAutoConfigurationlmportSelector:导入哪些组件的选择器

      • 将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

      • 会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件,有了自动配置类,免去了我们手动编写配置注入功能组件等的工作

      image-20200617014709788

      • SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader)

      • Spring Boot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们自动完成;

  3. 导入资源文件

  4. 排除资源文件

异常和热部署

idea Spring Boot热部署

idea --> Setting --> Build, Execution, Deployment --> Compiler --> Build project automatically

CHECKED --> Build project automatically

image-20200619234241335

快捷键:

​ Win: Ctrl+alt+shift+/

​ Mac: command+option+shift+/

选择Registry...

image-20200619234454059

CHECKED --> compiler.automake.allow.when.application.running

image-20200619234626498

POM依赖增加对热部署工具的依赖

Maven 打包异常

Last updated