第一单元 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.2SpringBoot 介绍
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.3Spring Boot 是如何工作的?
Spring Boot 会根据使用 @EnableAutoConfiguration 批注添加到项目中的依赖项自动配置应用程序。例如,如果 MySQL 数据库在类路径上,但尚未配置任何数据库连接,则 Spring Boot 会自动配置内存数据库。
【boot 启动类】重点
spring boot 应用程序的入口点是包含 @SpringBootApplication 注释和 main 方法的类。
Spring Boot 使用 @ComponentScan 注释自动扫描项目中包含的所有组件。
@ComponentScan(package name)
扫描多个包用逗号分隔,
Scan,扫描的意思
3.2.4Spring 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 依赖关系用于监视和管理应用程序。其代码如下所示 –
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
XML
Spring Boot Starter Security 依赖项用于 Spring Security。其代码如下所示 –
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
XML
Spring Boot Starter Web 依赖项用于编写 Rest 端点。其代码如下所示 –
【Web starter 是非常常用的 starter】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
– 这个 starter 非常常用
– 一般管这个 starter 叫 springboot 的 web starter
XML
Spring Boot Starter Thyme Leaf 依赖项用于创建 Web 应用程序。其代码如下所示 –
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
这个是 springboot 推荐的开发 html 页面的新技术。
XML
Spring Boot Starter Test 依赖项用于编写测试用例。其代码如下所示 –
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test<artifactId>
</dependency>
3.3 自动配置
【boot 设计的目标是(为了更少的配置文件),但是由于版本过多,各个版本之间还是有些差别(自动配置没有 boot 项目说的那么好),这不是 boot 的主要优点】
【boot 的优点并不是配置大于约定(说白了就是配置的 xml 的内容少些一些),而是微服务,微服务是 boot 流行起来的主要原因,是不同于传统的开发模式,其他的所有语言(面向对象和非面向对象语言)都不具备这个特点】
【每一个 boot 项目就是一个微服务】
【一个项目可以拆分为多个 boot 项目,每一个 boot 项目就是一个微服务】
Spring Boot Auto Configuration 会根据在项目中添加的 JAR 依赖项自动配置 Spring 应用程序。例如,如果 MySQL 数据库在类路径上,但尚未配置任何数据库连接,则 Spring Boot 会自动配置内存数据库。
为此,需要将 @EnableAutoConfiguration 批注或 @SpringBootApplication 批注添加到主类文件中。然后,将自动配置 Spring Boot 应用程序。
请注意以下代码以便更好地理解
3.4Spring Boot 应用程序
Spring Boot Application 的入口点是包含 @SpringBootApplication 注释的类。该类应具有运行 Spring Boot 应用程序的主要方法。@SpringBootApplication 注释包括自动配置,组件扫描和 Spring Boot 配置。
如果将 @SpringBootApplication 批注添加到类中,则无需添加 @EnableAutoConfiguration,@ComponentScan 和 @SpringBootConfiguration 批注。@SpringBootApplication 注释包括所有其他注释。
请注意以下代码以便更好地理解
【boot 启动类】
** 非常重要,需要反复练习
** 反复练习后,再看本单元的文字部分
–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 是什么功能?没有会怎么样?】
– 项目里有一个 service,那么启动 boot 项目,spring 会做什么操作?
– 一般情况下,把 spring 容器比作什么?
–spring 的这种管理方式有什么好处?
– 默认情况下,spring 启动后会做什么操作?
IOC/DI 在 boot 里如何操作?
3.6 下一单元将搭建一个 Boot 项目
Code demo
【demo 1 boot1th】
启动成功后,可以看到,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 的基础上
启动成功后:如下图
– 读取的 banner.txt
–6060 是 boot 项目启动的端口号
–com.zz.boot2thApp 是启动类
【搭建项目失败不要紧,报错也是效果,仔细排错是编程必须的一个步骤,代码不是敲出来的,是调试出来的,只有把错误解决了,才是真正学会 springboot】
【boot3th–part difficult point】
@Configuration 和 @Bean
在哪个包下
属于 spring4 的注解,和 spring 的原理一致
Bean id 和 getBean() 方法和 @Autowire 注解
IOC/DI
控制反转说的是让 spring new 一个对象,DI 说的是把一个对象赋值给 bean 里的一个成员
下图第一种形式,一般不采用,即不用 @Bean 后面带参数的注解,只会默认的即可
从 spring 容器中取得 persion 对象,取得 ppp 对象,取得 Ppp 对象
【练习:取得 p1 对象,取得 car1 对象,取得保时捷 car 对象】
注意 spring4 的原理
结论:@Configuration 等价于 <beans></beans>
注意观察 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
User Settings
【Alt+F5】,更新项目的 maven jar 包
Plus,学校的网不好,下 jar 包的时候用手机热点,下一次就可以,以后就不用下了
【重要参考文献】
https://www.yiibai.com/spring…
Spring mvc 配置 xml demo