目录
5.6@Import({AutoConfigurationImportSelector.class})
6 Spring Boot 在 Controller 中常用注解
1 什么是 Spring Boot
Spring Boot
是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简
化是指简化了
Spring
众多框架中所需的大量且繁琐的配置文件,所以
Spring Boot
是一个服
务于框架的框架,服务范围是简化配置文件。所以从本质上来说,
Spring Boot
其实就是
Spring
框架的另一种表现形式。
2 Spring Boot 特征
使用 Spring Boot
可以创建独立的
Spring
应用程序
在Spring Boot
中直接嵌入了
Tomcat
、Jetty、
Undertow
等
Web
容器,所以在使用
SpringBoot
做
Web
开发时不需要部署
WAR
文件
通过提供自己的启动器(Starter)
依赖,简化项目构建配置
尽量的自动配置 Spring
和第三方库
提供了生产就绪特征,如:度量指标,运行状况检查和外部化配置
绝对没有代码生成,也不需要 XML
配置文件
3 Spring Boot 版本介绍
SNAPSHOT
:快照版,即开发版。
CURRENT
:最新版,但是不一定是稳定版。
GA
:
General Availability
,正式发布的版本
4 Spring Boot 项目结构介绍
1 POM 文件
1.1
继承
<
parent
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-parent</
artifactId
>
<
version
>2.2.0.RELEASE</
version
>
<
relativePath
/>
<!-- lookup parent from repository -->
</
parent
>
Spring Boot
的父级依赖,只有继承它项目才是
Spring Boot
项目。
spring-boot-starter-parent
是一个特殊的
starter
,它用来提供相关的
Maven
默认依赖。使
用它之后,常用的包依赖可以省去
version
标签。
1.2
依赖
启动器依赖
1.3插件
spring-boot-maven-plugin
插件是将
springboot
的应用程序打包成
jar
包的插件。将所有
应用启动运行所需要的
jar
包都包含进来,从逻辑上将具备了独立运行的条件。当运行
"mvn
package"
进行打包后,使用
"java -jar"
命令就可以直接运行。
2 启动类
Spring Boot
的启动类的作用是启动
Spring Boot
项目,是基于
Main
方法来运行的。
注意:启动类在启动时会做注解扫描
(@Controller
、
@Service
、
@Repository......)
,扫描
位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
2.1
启动类与启动器区别:
启动类表示项目的启动入口
启动器表示 jar
包的坐标
3 启动器
Spring Boot
将所有的功能场景都抽取出来,做成一个个的
starter(
启动器
)
,只需要在项
目里面引入这些
starter
相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景,
在
jar
包管理上非常方便,最终实现一站式开发。
Spring Boot
提供了多达
44
个启动器。
spring-boot-starter
这是
Spring Boot
的核心启动器,包含了自动配置、日志和
YAML
。
spring-boot-starter-actuator
帮助监控和管理应用。
spring-boot-starter-web
支持全栈式
Web
开发,包括
Tomcat
和
spring-webmvc
。
spring-boot-starter-amqp
通过
spring-rabbit
来支持
AMQP
协议(
Advanced Message Queuing Protocol
)。
spring-boot-starter-aop
支持面向方面的编程即
AOP
,包括
spring-aop
和
AspectJ
。
spring-boot-starter-artemis
通过
Apache Artemis
支持
JMS
的
API
(
Java Message Service API
)。
spring-boot-starter-batch
支持
Spring Batch
,包括
HSQLDB
数据库。
spring-boot-starter-cache
支持
Spring
的
Cache
抽象。
spring-boot-starter-cloud-connectors
支持
Spring Cloud Connectors
,简化了在像
Cloud Foundry
或
Heroku
这样的云平台上连
接服务。
spring-boot-starter-data-elasticsearch
支持
ElasticSearch
搜索和分析引擎,包括
spring-data-elasticsearch
。
spring-boot-starter-data-gemfire
支持
GemFire
分布式数据存储,包括
spring-data-gemfire
。
spring-boot-starter-data-jpa
支持
JPA
(
Java Persistence API
),包括
spring-data-jpa
、
spring-orm
、
Hibernate
。
spring-boot-starter-data-mongodb
支持
MongoDB
数据,包括
spring-data-mongodb
。
spring-boot-starter-data-rest
通过
spring-data-rest-webmvc
,支持通过
REST
暴露
Spring Data
数据仓库。
spring-boot-starter-data-solr
支持
Apache Solr
搜索平台,包括
spring-data-solr
。
spring-boot-starter-freemarker
支持
FreeMarker
模板引擎。
spring-boot-starter-groovy-templates
支持
Groovy
模板引擎。
spring-boot-starter-hateoas
通过
spring-hateoas
支持基于
HATEOAS
的
RESTful Web
服务。
spring-boot-starter-hornetq
通过
HornetQ
支持
JMS
。
spring-boot-starter-integration
支持通用的
spring-integration
模块。
spring-boot-starter-jdbc
支持
JDBC
数据库。
spring-boot-starter-jersey
支持
Jersey RESTful Web
服务框架。
spring-boot-starter-jta-atomikos
通过
Atomikos
支持
JTA
分布式事务处理。
spring-boot-starter-jta-bitronix
通过
Bitronix
支持
JTA
分布式事务处理。
spring-boot-starter-mail
支持
javax.mail
模块。
spring-boot-starter-mobile
支持
spring-mobile
。
spring-boot-starter-mustache
支持
Mustache
模板引擎。
spring-boot-starter-redis
支持
Redis
键值存储数据库,包括
spring-redis
。
spring-boot-starter-security
支持
spring-security
。
spring-boot-starter-social-facebook
支持
spring-social-facebook
spring-boot-starter-social-linkedin
支持
pring-social-linkedin
spring-boot-starter-social-twitter
支持
pring-social-twitter
spring-boot-starter-test
支持常规的测试依赖,包括
JUnit
、
Hamcrest
、
Mockito
以及
spring-test
模块。
spring-boot-starter-thymeleaf
支持
Thymeleaf
模板引擎,包括与
Spring
的集成。
spring-boot-starter-velocity
支持
Velocity
模板引擎。
spring-boot-starter-websocket
支持
WebSocket
开发。
spring-boot-starter-ws
支持
Spring Web Services
。
spring-boot-starter-actuator
增加了面向产品上线相关的功能,比如测量和监控。
spring-boot-starter-remote-shell
增加了远程
ssh shell
的支持。
spring-boot-starter-jetty
引入了
Jetty HTTP
引擎(用于替换
Tomcat
)。
spring-boot-starter-log4j
支持
Log4J
日志框架。
spring-boot-starter-logging
引入了
Spring Boot
默认的日志框架
Logback
。
spring-boot-starter-tomcat
引入了
Spring Boot
默认的
HTTP
引擎
Tomcat
。
spring-boot-starter-undertow
引入了
Undertow HTTP
引擎(用于替换
Tomcat
)。
4 配置文件
Spring Boot
提供一个名称为
application
的全局配置文件,支持两种格式
properteis
格式
与
YAML
格式。
4.1Properties
格式
配置
Tomcat
监听端口
4.2YAML 格式
YAML 格式配置文件的扩展名可以是 yaml 或者 yml。
4.2.1基本格式要求
大小写敏感
使用缩进代表层级关系
相同的部分只出现一次
配置
Tomcat
监听端口
4.3配置文件存放位置
当前项目根目录中
当前项目根目录下的一个/config
子目录中
项目的 resources
即
classpath
根路径中
项目的 resources
即
classpath
根路径下的
/config
目录中
4.4
配置文件加载顺序
4.4.1不同格式的加载顺序
如 果 同 一 个 目 录 下 , 有
application.yml
也 有
application.properties
, 默 认 先 读 取
application.properties
。
如果同一个配置属性,在多个配置文件都配置了,默认使用第
1
个读取到的,后面读取
的不覆盖前面读取到的。
4.4.2
不同位置的加载顺序
4.4.2.1 当前项目根目录下的一个/config
子目录中
(
最高
)
config/application.properties
config/application.yml
4.4.2.2 当前项目根目录中(
其次
)
application.properties
application.yml
4.4.2.3 项目的 resources
即
classpath
根路径下的
/config
目录中
(
一般
)
resources/config/application.properties
resources/config/application.yml
4.4.2.4 项目的 resources
即
classpath
根路径中
(
最后
)
resources/application.properties
resources/application.yml
4.5
配置文件中的占位符
4.5.1
占位符语法
语法:
${}
4.5.2
占位符作用
"${}"中可以获取框架提供的方法中的值如:
random.int
等。
占位符可以获取配置文件中的键的值赋给另一个键作为值。
4.5.3
生成随机数
${random.value} -
类似
uuid
的随机数,没有
"-"
连接
${random.int} -
随机取整型范围内的一个值
${random.long} -
随机取长整型范围内的一个值
${random.long(100,200)} -
随机生成长整型
100-200
范围内的一个值
${random.uuid} -
生成一个
uuid
,有短杠连接
${random.int(10)} -
随机生成一个
10
以内的数
${random.int(100,200)} -
随机生成一个
100-200
范围以内的数
4.6bootstrap
配置文件
4.6bootstrap
配置文件
Spring Boot
中有两种上下文对象,一种是
bootstrap, 另外一种是 application, bootstrap
是应用程序的父上下文,也就是说
bootstrap
加载优先于 applicaton。
bootstrap
主要用于从
额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一
个环境,它是任何
Spring
应用程序的外部属性的来源。
bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
4.6.2bootstrap
配置文件特征
application
配置文件主要用于
Spring Boot
项目的自动化配置。
bootstrap
配置文件有以下几个应用场景。
使用 Spring Cloud Config
配置中心时,这时需要在
bootstrap
配置文件中添加连
接到配置中心的配置属性来加载外部配置中心的配置信息。
一些固定的不能被覆盖的属性。
一些加密/
解密的场景。
5 Spring Boot 的核心注解
5.1@SpringBootApplication
是
SpringBoot
的启动类。
此注解等同于
@Configuration+@EnableAutoConfiguration+@ComponentScan
的组合。
5.2@SpringBootConfiguration
@SpringBootConfiguration
注解是
@Configuration
注解的派生注解,跟
@Configuration
注解的功能一致,标注这个类是一个配置类,只不过
@SpringBootConfiguration
是
springboot
的注解,而
@Configuration
是
spring
的注解
5.3@Configuration
通过对
bean
对象的操作替代
spring
中
xml
文件
5.4@EnableAutoConfiguration
Spring Boot
自动配置(
auto-configuration
):尝试根据你添加的
jar
依赖自动配置你的
Spring
应用。是
@AutoConfigurationPackage
和
@Import(AutoConfigurationImportSelector.class)
注解的组合。
5.5@AutoConfigurationPackage
@AutoConfigurationPackage
注解,自动注入主类下所在包下所有的加了注解的类
(
@Controller
,
@Service
等),以及配置类(
@Configuration
)
5.6@Import({AutoConfigurationImportSelector.class})
直接导入普通的类
导入实现了
ImportSelector
接口的类
导入实现了
ImportBeanDefinitionRegistrar
接口的类
5.7@ComponentScan
组件扫描,可自动发现和装配一些
Bean
。
5.8@ConfigurationPropertiesScan
@ConfigurationPropertiesScan
扫描配置属性。
@EnableConfigurationProperties
注解的作
用是使用
@ConfigurationProperties
注解的类生效。
6 Spring Boot 在 Controller 中常用注解
6.1@RestController
@RestController
相当于
@Controller+@ResponseBody
注解
如果使用
@RestController
注解
Controller
中的方法无法返回页面,相当于在方法上面自
动 加 了
@ResponseBody
注 解 , 所 以 没 办 法 跳 转 并 传 输 数 据 到 另 一 个 页 面 , 所 以
InternalResourceViewResolver
也不起作用,返回的内容就是
Return
里的内容。
6.2@GetMapping
@GetMapping
注解是
@RequestMapping(method = RequestMethod.GET)
的缩写。
6.3@PostMapping
@PostMapping
注解是
@RequestMapping(method = RequestMethod.POST)
的缩写。
6.4@PutMapping
@PutMapping
注解是
@RequestMapping(method = RequestMethod.PUT)
的缩写。
6.5@DeleteMapping
@DeleteMapping
注解是
@RequestMapping(method = RequestMethod.DELETE)
的缩写。
7 Spring Boot 访问静态资源
在
SpringBoot
项目中没有我们之前常规
web
开发的
WebContent
(
WebApp
),它只有
src
目录。在
src/main/resources
下面有两个文件夹,
static
和
templates
。
SpringBoot
默认在
static
目录中存放静态页面,而
templates
中放动态页面。
1 static 目录
Spring Boot
通过
classpath/static
目录访问静态资源。注意存放静态资源的目录名称必须
是
static
。
2 templates 目录
在
Spring Boot
中不推荐使用
jsp
作为视图层技术,而是默认使用
Thymeleaf
来做动态页
面。
Templates
目录这是存放
Thymeleaf
的页面。
3 静态资源存放其他位置
3.1Spring Boot 访问静态资源的位置
classpath:/META
‐
INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
3.2自定义静态资源位置
#
配置静态资源访问路径
spring.resources.static-locations
=
classpath:/suibian/,cla
sspath:/static/