第一单元**SpringBoot**入门

1 【授课重点】

1) SpringBoot空项目搭建,

2) SpringBoot发展历史,

3) 热部署,

4) spring-boot-starter-web,

2 【考核要求】

1) SpringBoot空项目搭建,

2) RestController与Controller讲解,

3) SpringBoot jsp页面

4) 在boot项目里使用jstl标签

3 【教学内容】

3.1 课程导入

1、为什么要有SpringBoot项目

2、SpringBoot和微服务的关系(没有boot项目就没有微服务)

3、公司新建项目采用的全是微服务

4、Springboot项目的稳定版本和最新版本(1.5,2.x)

5、SpringBoot的微服务比dubbo的微服务在开发和设计上更先进

3.2 SpringBoot介绍

Spring Boot是一个基于Java的开源框架,用于创建微服务。它由Pivotal Team开发,用于构建独立的生产就绪Spring应用。 本章将介绍Spring Boot,并熟悉基本概念。

3.2.1 微服务是什么?

微服务(Micro Service)是一种允许开发人员独立开发和部署服务的体系结构。每个运行的服务都有自己的流程,这实现了轻量级模型以支持业务应用程序。

例如

--员工微服务

--部门微服务

--教师微服务

--学生微服务

--班级微服务

----学生查询的时候,会调用班级微服务

----员工查询的时候,也会调用部门微服务

----思考在dubbo学习的时候,周考时,是不是让我们建立两个微服务(provider,server)?两个微服务可以分开部署,性能会大大增加。

优点:

Spring Boot为其开发人员提供以下优势 -

易于理解和开发Spring应用

提高生产力

缩短开发时间

设计目标

Spring Boot的设计目标如下 -

避免在Spring中进行复杂的XML配置

以更简单的方式开发生产就绪的Spring应用程序

隐藏和默认的方式使用Spring4

减少开发时间并独立运行应用程序

提供一种更简单的应用程序入门方式【前提是会用spring4,其实boot项目是易用,难精通,表面上是使用了boot项目,实际对boot,spring4,和springmvc和spring容器之间的关系难以掌握】,这里理论的内容又往往是面试的重点

要想学会SpringBoot项目,一定要深刻理解Spring4,对每个注解都要充分理解。每个注解在项目里有什么功能

3.2.2 为什么选择Spring Boot?

选择Spring Boot,因为它提供的功能和优点如下 -

它提供了一种灵活的方法来配置Java Bean,XML配置和数据库事务。

它提供强大的批处理和管理REST端点。(现在流行的rest请求,而不是我们过去学习的socket的请求方式,或者是httpclient的请求方式)

在Spring Boot中,一切都是自动配置的; 无需手动配置。

它提供基于注释的spring应用程序。

简化依赖管理。

它包括嵌入式Servlet容器。

支持filter和interceptor。

3.2.3 Spring Boot是如何工作的?

Spring Boot会根据使用@EnableAutoConfiguration批注添加到项目中的依赖项自动配置应用程序。 例如,如果MySQL数据库在类路径上,但尚未配置任何数据库连接,则Spring Boot会自动配置内存数据库。

【boot 启动类】重点

spring boot应用程序的入口点是包含@SpringBootApplication注释和main方法的类。
Spring Boot使用@ComponentScan注释自动扫描项目中包含的所有组件。

@ComponentScan(package name)

扫描多个包用逗号分隔,

Scan,扫描的意思

3.2.4 Spring Boot Starters

处理依赖管理对于大项目来说是一项艰巨的任务。 Spring Boot通过提供一组依赖项来解决此问题,以方便开发人员。

每一个模块,在boot项目里,都有一个对应的starter。

例如,如果要使用Spring和JPA进行数据库访问,则在项目中包含spring-boot-starter-data-jpa依赖项就足够了。

请注意,所有Spring Boot启动程序都遵循相同的命名模式spring-boot-starter-,其中表示它是应用程序的一种类型。

例子

请看下面的Spring Boot启动器,以便更好地理解 -

Actuator 监控boot项目运行时占用内存的情况】
Spring Boot Starter Actuator依赖关系用于监视和管理应用程序。 其代码如下所示 -

org.springframework.boot

spring-boot-starter-actuator

XML

Spring Boot Starter Security依赖项用于Spring Security。 其代码如下所示 -

org.springframework.boot

spring-boot-starter-security

XML

Spring Boot Starter Web依赖项用于编写Rest端点。 其代码如下所示 -

【Web starter 是非常常用的starter】

org.springframework.boot

spring-boot-starter-web

--这个starter非常常用

--一般管这个starter叫springboot的web starter

XML

Spring Boot Starter Thyme Leaf依赖项用于创建Web应用程序。 其代码如下所示 -

org.springframework.boot

spring-boot-starter-thymeleaf

这个是springboot推荐的开发html页面的新技术。

XML

Spring Boot Starter Test依赖项用于编写测试用例。 其代码如下所示 -

org.springframework.boot

spring-boot-starter-test

3.3 自动配置

【boot设计的目标是(为了更少的配置文件),但是由于版本过多,各个版本之间还是有些差别(自动配置没有boot项目说的那么好),这不是boot的主要优点】

【boot的优点并不是配置大于约定(说白了就是配置的xml的内容少些一些),而是微服务,微服务是boot流行起来的主要原因,是不同于传统的开发模式,其他的所有语言(面向对象和非面向对象语言)都不具备这个特点】

【每一个boot项目就是一个微服务】

【一个项目可以拆分为多个boot项目,每一个boot项目就是一个微服务】

Spring Boot Auto Configuration会根据在项目中添加的JAR依赖项自动配置Spring应用程序。例如,如果MySQL数据库在类路径上,但尚未配置任何数据库连接,则Spring Boot会自动配置内存数据库。

为此,需要将@EnableAutoConfiguration批注或@SpringBootApplication批注添加到主类文件中。然后,将自动配置Spring Boot应用程序。

请注意以下代码以便更好地理解

img

3.4 Spring Boot应用程序

Spring Boot Application的入口点是包含@SpringBootApplication注释的类。该类应具有运行Spring Boot应用程序的主要方法。 @SpringBootApplication注释包括自动配置,组件扫描和Spring Boot配置。

如果将@SpringBootApplication批注添加到类中,则无需添加@EnableAutoConfiguration,@ComponentScan和@SpringBootConfiguration批注。@SpringBootApplication注释包括所有其他注释。

请注意以下代码以便更好地理解

【boot 启动类】

img

**非常重要,需要反复练习

**反复练习后,再看本单元的文字部分

--SpringBootApplication

--SpringApplication

--main函数,和之前学习的main函数有区别吗?

--spring容器在boot项目里如何取得?

什么叫boot的启动类?参考boot的reference,官方文档

常用的官方文档有1.5和2.x两个版本。

如何启动boot项目?

Boot启动后的执行顺序?先执行什么,在执行什么?

Boot项目的pom如何写?

Spring的注解在boot项目里能使用吗?

如果在boot项目里使用spring的技术,需要导入spring的jar包吗?

3.5 组件扫描

Spring Boot应用程序在应用程序初始化时扫描所有bean和包声明。需要为类文件添加@ComponentScan批注,以扫描项目中添加的组件。

请注意以下代码以便更好地理解 -

【@ComponentScan 是 spring4里 代替xml里 component-scan 标签的注解】

【提问:ssm项目xml里component-scan是什么功能?,没有会怎么样?】

【springmvc里,也有一个scan是什么功能?没有会怎么样?】

img

--项目里有一个service,那么启动boot项目,spring会做什么操作?

--一般情况下,把spring容器比作什么?

--spring的这种管理方式有什么好处?

--默认情况下,spring启动后会做什么操作?

IOC/DI在boot里如何操作?

3.6 下一单元将搭建一个Boot项目

Code demo

【demo 1 boot1th】

img

img

img

img

img

img

img

img

启动成功后,可以看到,boot项目启动后可以看到启动类和tomcat的端口号8080

--先总体的看一下项目的代码,从eclipse里

--分析每一行代码,xml算代码吗?

--确认项目里的maven是否好使

--eclipse如何使用maven?

--idea如何使用maven?

--建立maven项目的步骤是什么?

--如何测试本地的maven是否好使?

--启动类的命名为什么要有规则?

--spring-boot-maven-plugin是什么?

--boot项目的默认配置文件时什么,放在哪里?

Summary

--建立maven项目

--加载boot的jar包

--建立包结构,com.zz或则com.bw

--增加application.yml或则application.properties

--项目里只能有一个默认配置文件,boot reference规定

--建立启动类

--测试boot项目是否成功

【boot2th】

在boot1th的基础上

img

img

img

启动成功后:如下图

img

--读取的banner.txt

img

--6060是boot项目启动的端口号

--com.zz.boot2thApp是启动类

【搭建项目失败不要紧,报错也是效果,仔细排错是编程必须的一个步骤,代码不是敲出来的,是调试出来的,只有把错误解决了,才是真正学会springboot】

【boot3th--part difficult point】

@Configuration和@Bean

在哪个包下

img

属于spring4的注解,和spring的原理一致

Bean id和getBean()方法和@Autowire注解

IOC/DI

控制反转说的是让spring new一个对象,DI说的是把一个对象赋值给bean里的一个成员

下图第一种形式,一般不采用,即不用@Bean后面带参数的注解,只会默认的即可

img

从spring容器中取得persion对象,取得ppp对象,取得Ppp对象

【练习:取得p1对象,取得car1对象,取得保时捷car对象】

注意spring4 的原理

img

结论:@Configuration等价于

注意观察ssm项目里,spring.xml

回忆一下专业6阶段学习的IOC和DI的原理

所有在Controller里注入的对象,都是spring IOC的生成的对象。如果springIOC没有生成对象,那么在Controller注入的对象一定是null,使用的时候就会发生NullPointerException

【IOC生成对象,DI把对象赋值到一个bean里的某一个属性上】

IOC/DI能大大提高java语言的性能,这是其他语言不具备的,C++语言也无法比拟,spring和java是使java成为排名第一的语言,java排名第一不是因为java是面向对象的语言,是因为java有spring的帮助

需要深刻理解Spring IOC/DI

推荐spring in action

To be continued

问题:

--@Configuration,@Bean是什么技术,是boot的技术还是mvc的技术?

--@Configuration用xml如何代替?

--@Bean如何用xml代替?

3.7 【Eclipse下maven的配置】

Windows,preference,maven

Installations as below

img

User Settings

img

【Alt+F5】,更新项目的maven jar包

Plus,学校的网不好,下jar包的时候用手机热点,下一次就可以,以后就不用下了

【重要参考文献】

https://www.yiibai.com/spring-boot

Spring mvc配置xml demo

img