SpringBoot介绍_Spring框架的缺点
Spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。
除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spring5.0以上只能使用Junit4.12以上的版本。
总结起来,Spring的缺点就是:
- 配置过于繁琐。
- 引入的依赖过多,版本控制复杂。
实时效果反馈
1. 相比于SpringBoot,Spring的缺点是
A 配置简单,依赖较少。
B 配置繁琐,依赖过多。
C 配置繁琐,依赖较少。
D 配置简单,依赖过多。
答案
1=>B
SpringBoot介绍_什么是SpringBoot
SpringBoot对Spring的缺点进行改善和优化,基于约定大于配置的思想,简化了Spring的开发,所谓简化是指简化了Spring中大量的配置文件和繁琐的依赖引入。所以SpringBoot是一个服务于框架的框架,它不是对Spring功能的增强,而是提供了一种快速使用Spring框架的方式。
SpringBoot的优点:
- 配置简单
- 依赖引入简单
- 提供了一些大型项目的非功能特性,如嵌入式服务器,安全指标,健康监测等。
自动配置
SpringBoot项目自动提供最优配置,同时可以修改默认值满足特定的要求。
起步依赖
SpringBoot的依赖是基于功能的,而不是普通项目的依赖是基于JAR包的。SpringBoot将完成一个功能所需要的所有坐标打包到一起,并完成了版本适配,我们在使用某功能时只需要引入一个依赖即可。
实时效果反馈
1. SpringBoot的核心思想是
A 面向切面编程
B 控制反转
C 约定大于配置
D 面向对象编程
2. SpringBoot的核心功能是
A 注解开发
B 自动配置
C 起步依赖
D 自动配置、起步依赖
答案
1=>C 2=>D
SpringBoot介绍_SpringBoot3介绍
SpringBoot3是目前SpringBoot最新版本,它包含了12个月以来151个开发者的5700多次代码提交。这是自 2018年SpringBoot发布2.0以来,SpringBoot的第一次重大修订。
当然使用SpringBoot是需要一定版本要求的:
工具 | 版本要求 |
---|---|
IDEA | 2021.2.1+ |
Java | 17+ |
Maven | 3.5+ |
Tomcat | 10.0+ |
Servlet | 5.0+ |
GraalVM(原生镜像功能) | Community 22.3+ |
Native Build Tools(原生镜像功能) | 0.9.19+ |
实时效果反馈
1. 使用SpringBoot3进行开发时,Java的最低版本是
A 8
B 11
C 17
D 20
答案
1=>C
SpringBoot入门_通过官网搭建项目
接下来我们搭建一个SpringBoot项目,并引入SpringMVC的功能,首先我们可以通过官网搭建项目:
访问start.spring.io
生成SpringBoot项目
SpringBoot版本说明:
- SNAPSHOT:快照版,表示开发版本,随时可能修改;
- M1(Mn):M1是milestone的缩写,也就是里程碑版本;
- RC1(RCn):RC1是release candidates的缩写,也就是发布预览版;
- Release:正式版,也可能没有任何后缀也表示正式版
SpringBoot打包类型说明:
- 使用SpringMVC开发的是一个web项目,但由于在SpringBoot中直接嵌入了Tomcat等Web容器,所以在使用SpringBoot做Web开发时不需要部署War文件,只需要打成Jar包即可。
解压生成的SpringBoot项目
在Idea中打开解压的SpringBoot项目即可
实时效果反馈
1. SpringBoot项目的打包类型为
A JAR
B WAR
C POM
D 以上都不对
2. SpringBoot版本号没有后缀,代表的是
A 快照版
B 里程碑版本
C 发布预览版
D 正式版
答案
1=>A 2=>D
SpringBoot入门_通过IDEA脚手架搭建项目(使用最多)
我们也可以在IDEA中利用脚手架工具搭建项目:
在IDEA中新建项目,项目类型为Spring Initializr,写项目名、存放位置、语言类型、项目类型、JDK版本等。点击下一步。
注意:这里一定要将项目类型改为Maven
选择SpringBoot版本和需要的起步依赖,创建。
完成项目搭建
实时效果反馈
1. 通过IDEA脚手架搭建SpringBoot项目时,项目类型为
A Java
B Maven
C Spring Initializr
D Java Enterprise
答案
1=>C
SpringBoot入门_SpringBoot项目结构
接下来我们了解SpringBoot项目的项目结构:
src.main.java
这个目录下存放的是Java代码,在我们写好的包名下,SprinBoot生成了一个启动类,启动类的作用是启动SpringBoot项目,运行启动类的main方法即可启动SpringBoot项目。
src.main.resources
这个目录下存放的是配置文件和页面相关的代码,SpringBoot默认在static
目录中存放静态资源,如css、js、图片等等。而templates
中存放模板引擎,如jsp、thymeleaf等。
由于SpringBoot极大简化了Spring配置,所以只有一个application.properties配置文件,Spring的自动配置功能使得大部分的配置都有默认配置,该文件的功能是覆盖默认配置信息,该文件不写任何信息都可以启动项目。
启动后默认端口号为8080,我们可以覆盖该配置:
src.test.java
这个目录下编写的是测试代码
pom文件
SpringBoot项目必须继承spring-boot-starter-parent,即所有的SpringBoot项目都是spring-boot-starter-parent的子项目。spring-boot-starter-parent中定义了常用配置、依赖、插件等信息,供SpringBoot项目继承使用。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.2</version> <relativePath/> <!-- lookup parent from repository --> </parent>
SpringBoot项目中可以定义起步依赖,起步依赖不是以jar包为单位,而是以功能为单位
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
spring-boot-maven-plugin插件是将项目打包成jar包的插件。该插件打包后的SpringBoot项目无需依赖web容器,可以直接使用JDK运行
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
实时效果反馈
1. SpringBoot项目的父工程为
A spring-boot-starter-parent
B spring-boot-starter-web
C spring-boot-starter-father
D spring-boot-starter-super
2. 在SpringBoot项目中,文件夹下写Java代码
A src.main.java
B src.main.resources
C src.test.java
D 以上都不对
答案
1=>A 2=>A
SpringBoot入门_通过Maven搭建项目
不管是通过官网,还是通过脚手架搭建项目,都需要连接SpringBoot官网,但国内与SpringBoot官网连接并不稳定,此时我们也可以使用Maven手动搭建SpringBoot项目:
创建新项目
在pom中添加项目的父工程、起步依赖、插件、依赖和插件的下载地址
<!-- 父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.2</version> </parent> <!-- 起步依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 插件 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
编写启动类
@SpringBootApplication public class SpringBootApp { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } }
编写配置文件application.properties
#日志格式 logging.pattern.console=%d{MM/dd HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n #端口号 server.port=8889
运行启动类主方法,启动项目
实时效果反馈
1. 以下是SpringBoot配置文件的是
A applicationContext.xml
B SqlMapConfig.xml
C springmvc.xml
D application.properties
2. SpringBoot启动类中,主方法执行的代码是
A Application.run()
B Application.start()
C SpringApplication.run()
D SpringApplication.start()
答案
1=>D 2=>C
SpringBoot入门_编写Java代码
之前搭建的SpringBoot项目已经都整合了SpringMVC,我们编写一个控制器进行测试:
@Controller
public class MyController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
System.out.println("hello springboot!");
return "hello springboot!";
}
}
启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描位置为同包或者同级包下的注解,所以我们要在启动类同级或同级包下编写代码。
启动项目,访问http://localhost:8889/hello
实时效果反馈
1. 在SpringBoot中,Java代码要写在
A 启动类同包下
B 启动类同级包下
C 启动类同包下或同级包下
D 以上都不正确
答案
1=>C
YAML文件_配置文件介绍
SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,可以使用application.properties
文件进行配置。properties文件是键值对类型的文件,之前一直在使用,所以我们不再对properties文件进行阐述。
Spring Boot Reference Documentation
可以查找配置文件如何覆盖SpringBoot项目的默认配置。
除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为.yml
或.yaml
。SpringBoot默认会从resources目录下加载application.properties
或application.yml
文件。
YAML文件的基本要求如下:
- 大小写敏感
- 使用缩进代表层级关系
- 同级配置必须对齐,上下级配置必须缩进,但缩进的空格数不限。
- 相同的部分只出现一次
- 冒号和值之间必须要有空格
比如使用properties文件配置tomcat端口以及项目路径:
server.port=8888
server.servlet.context-path=/itbaizhan
而使用YAML文件配置tomcat端口:
server:
servlet:
context-path: /itbaizhan
port: 8888
实时效果反馈
1. SpringBoot配置文件格式为
A properties
B xml
C yaml
D properties和yaml
2. 关于YAML文件,说法错误的是
A 扩展名为.yml
或.yaml
B 大小写不敏感
C 大小写敏感
D 使用缩进代表层级关系
答案
1=>D 2=>B
YAML文件_自定义配置数据
除了覆盖默认配置,我们还可以在YAML文件中进行自定义配置,以便我们在项目中读取使用。
配置简单数据
语法:
数据名: 值示例代码:
email: itbaizhan@sxt.com
配置对象数据
语法:
对象: 属性名1: 属性值 属性名2: 属性值 # 或者 对象: {属性名1: 属性值,属性名2: 属性值}
示例代码:
# 邮箱1 my1: email: itbaizhan@sxt.com password: itbaizhan # 邮箱2 my2: {email: itbaizhan1@sxt.com,password: itbaizhan}
配置集合数据
语法
集合: - 值1 - 值2 # 或者 集合: [值1,值2]
示例代码
# 城市 city1: - beijing - shanghai - tianjin - chongqing city2: [beijing,tianjin,shanghai,chongqing] # 集合中的元素是对象 sxt: - address: beijing mobile: 13888888888 email: bjsxt@sxt.com - address: shanghai mobile: 13777777777 email: shsxt@sxt.com - address: guangzhou mobile: 13666666666 email: gzsxt@sxt.com
注意:值与之前的 - 之间存在一个空格
实时效果反馈
1. yml配置集合时,-与值之间要有
A 空格
B 逗号
C 句号
D 冒号
答案
1=>A
YAML文件_@Value读取配置文件
读取自定义配置时,我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,用法如下:
配置文件
email: itbaizhan@sxt.com my1: email: itbaizhan@sxt.com password: itbaizhan city1: - beijing - shanghai - tianjin - chongqing sxt: - address: beijing mobile: 13888888888 email: bjsxt@sxt.com - address: shanghai mobile: 13777777777 email: shsxt@sxt.com - address: guangzhou mobile: 13666666666 email: gzsxt@sxt.com
读取配置文件数据:
@Controller public class YmlController1 { @Value("${email}") private String email; @Value("${my1.password}") private String password; @Value("${city1[0]}") private String city1; @Value("${sxt[1].mobile}") private String mobile; @RequestMapping("/yml1") @ResponseBody public String yml1(){ return email+":"+password+":"+city1+":"+mobile; } }
@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。
实时效果反馈
1. 使用注解可以将配置文件中的值映射到Bean的属性中
A @Import
B @Value
C @ConfigurationProperties
D @SpringBootApplication
答案
1=>B
YAML文件_@ConfigurationProperties读取配置文件
通过@ConfigurationProperties(prefifix="对象")
可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。
配置文件
user: id: 10001 username: shangxuetang address: - beijing - tianjin - shanghai - chongqing grades: - subject: math score: 100 - subject: english score: 90
实体类
public class Grade { private String subject; private double score; // 省略getter/setter/tostring }
读取配置文件
@Controller @ConfigurationProperties(prefix = "user") public class YmlController2 { private int id; private String username; private List<String> address; private List<Grade> grades; @RequestMapping("/yml2") @ResponseBody public String yml2(){ System.out.println(id); System.out.println(username); System.out.println(address); System.out.println(grades); return "hello springboot!"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public List<String> getAddress() { return address; } public void setAddress(List<String> address) { this.address = address; } public List<Grade> getGrades() { return grades; } public void setGrades(List<Grade> grades) { this.grades = grades; } }
实时效果反馈
1. 使用注解可以将配置文件中的对象自动与实体Bean进行映射
A @Import
B @Value
C @ConfigurationProperties
D @SpringBootApplication
答案
1=>C
YAML文件_占位符
YAML文件中可以使用${}
占位符,它有两个作用:
使用配置文件中的值
编写配置文件
server: port: 8888 myconfig: myport: ${server.port}
读取配置文件
@Controller public class YmlController3 { @Value("${myconfig.myport}") private int port; @RequestMapping("/yml3") @ResponseBody public String yml3(){ System.out.println(port); return "hello springboot!"; } }