第一单元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依赖关系用于监视和管理应用程序。 其代码如下所示 -
XML
Spring Boot Starter Security依赖项用于Spring Security。 其代码如下所示 -
XML
Spring Boot Starter Web依赖项用于编写Rest端点。 其代码如下所示 -
【Web starter 是非常常用的starter】
--这个starter非常常用
--一般管这个starter叫springboot的web starter
XML
Spring Boot Starter Thyme Leaf依赖项用于创建Web应用程序。 其代码如下所示 -
这个是springboot推荐的开发html页面的新技术。
XML
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应用程序。
请注意以下代码以便更好地理解
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等价于
注意观察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