SpringBoot-基础入门笔记(1)
前言
非常感谢三根草堂师父的Spring Boot
系列教程,内容基本来源于三根草堂师父,也是学习边记录,希望通过学习能写出自己写出一个项目,且对Javaweb
类的程序有一定了解,并能够入门Java
安全代码审计。
环境搭建
版本要求
JDK : 8+
Maven :3.5.x+
这里我选用2.5.2版本的Spring Boot
新建一个SpringBoot项目
方法一:Idea手动导入
创建一个空的Maven项目,在File-Setting
中配置好Maven
maven
和其仓库目录根据自己的情况修改。
创建好项目后,会自动生成一个pom.xml
,
再导入依赖:(相关说明在注解里)
1 |
|
这里我们还需要配置下Setting.xml
文件
打开后在Setting标签下添加:
1 | <!--下面是添加阿里云镜像,这样下载依赖更快,不过我在国外使用这个镜像反而无法下载,所以如果不适用直接注释掉就好了--> |
方法二: 网站下载
通过Spring Initilizr配置好下载就行了。
方法三:通过IDEA新建(和方法二差不多)
Maven配置
有时候,如果我们依赖文件导入到一半中止,这时候会有一些错误,那么我们可以用一个清理Maven仓库的脚本, 修改一下仓库路径,然后保存为.bat
文件,双击即可清理
1 | @echo off |
一个简易的Hello World
Application和Controller
在src-main-java
下新建一个package
,然后新建我们的HelloApplication Class
,再新建一个Controller package
来存放我们的Controller classes
,需要注意的是,我们的Controller Class
必须放在application class
的子目录里。注意,通过Spring Initilizr
网站上直接下载的直接就有这些class
了。
Application Class
的代码:
1 |
|
Controller
的代码:
1 | //@Controller |
RestController
Controller Class
需要加上@Controller
如果要让数据返回到response body
中,需要使用@ResponseBody
@RestController
相当于 @Controller+@ResponseBody
,所以我们也可以直接用这个代替
@RequestMapping
表示处理请求
jar打包运行
打包
pom.xml
中加入以下代码
1 | <!-- 可以使用mavin插件 可以用来打包 --> |
然后在Idea右侧的Maven
中双击package
即可
运行
在target
文件夹中可找到我们生成的jar
文件,在当前文件所在目录的cmd
中用java -jar filename
运行起来即可
版本锁定
Spring Boot所继承的spring-boot-starter-parent
这个副工程为我们对常用的依赖进行了版本锁定(在父工程的pom.xml
文件中)。
我们可以通过直接指定版本号(在我们的pom.xml
)和覆盖properties
配置来修改依赖的版本(在父工程的pom.xml
文件中)。。
Starter机制
一个starter针对一种特定的场景,内部引用了该场景所需要的依赖,所以我们不需要单独引入多个依赖。
命名规律
官方starter都是以 spring-boot-starter 开头后面跟上场景名称。例如:spring-boot-starterdata-jpa
非官方starter则是以 场景名-spring-boot-starter 的格式,例如:mybatis-spring-boot-starter
非官方的starter是不会被Spring Boot
的父工程进行版本指定的,所以我们需要指定version
YAML文件配置(重要)
介绍
YAML是以yml
为后缀的文件,用来完成XML所完成的任务,易于阅读且简单明了。yaml
文件应该放在resources
文件夹中,如application.yml
约定
key: value
冒号后面必须有一个空格用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
缩进时不允许使用
TAB
键,只允许用空格命名时,
lastName和last-name都可以
语法
1 | name1: sangeng//可以不用引号 |
Spring Boot读取YML
@Value注解
该注解只能获取简单类型的值(8种基本数据类型以及其包装类,String,Date)
1 |
|
加了@Value
的Class必须要交由Spring容器管理,如此处的@RestController
@ConfigurationProperties 注解 与Lombok插件
使用@ConfigurationProperties
的Class必须要交由Spring容器管理。
yml
文件中:
1 | student2: {name: jack,age: 21} |
Student Class
中:
1 | //根据我们的attribute帮我们生成set/get方法 |
要求对应的属性要有set/get方法,而此处我们用Lombok
这个依赖帮我们自动完成这件事,所以我们不需要手动生成set/get
方法
当然,我们还需要安装Lombok 插件:
1 | <dependency> |
HelloController
中
1 | //因为创建Student类的instance,所以用autowired可以自动注入,从Spring容器中获取数据,赋值给下面的变量 |
@ConfigurationProperties 配置提示
另外,如果我们使用了@ConfigurationProperties
注解,我们可以增加如下依赖,这样在写配置的时候会有提示
1 | <dependency> |
重启idea即可
YML和Properties转换
application.yml
需要改成application.properties
问题解决
依赖冲突
造成原因
A依赖B(低版本)
C依赖B(高版本)
若你先引入A,那么低版本的B会被引入,再引入C后,C就找不到高版本的B,就会出现依赖冲突
解决方法
下载Maven Helper
插件,重启idea
后,打开pom.xml
,下面就有Dependency Analyzer
,refresh
后可以找到冲突项,然后选择低版本的,右键exclude
,再次刷新后问题解决。
修改依赖后如何生效?
很简单,右上角有一个Maven的图标,load一下change就好了
Reference
三根草堂师父的Spring Boot
系列教程