文章目录
- 一、Spring Boot 介绍
- 1. 概念
- 2.maven构建Spring Boot项目
- 3. 自定义banner
- 4. Spring Boot的全局配置文件
- 5. Spring Boot项目的发布方式
- 二、Spring Boot注入方式
- 1. @Value方式
- 2. @ConfigurationProperties方式
- 3. SpringBoot默认注入方式
- 4. SpringBoot中的默认配置
- 三、Spring Boot自动装配原理
- 四、Spring Boot 整合Thymeleaf
- 1.Thymeleaf介绍
- 2. Thymeleaf 基本语法
- 3. Thymeleaf 视图解析器优先级
一、Spring Boot 介绍
1. 概念
(1)什么是Spring Boot ?
- Spring Boot是由Pivotal团队提供的全新框架,其中“Boot”的意思就是“引导”,意在简化开发模式,使开发者能够快速的开发出基于Spring 的应用。
- Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。
(2)Spring Boot 特点
- 嵌入的 Tomcat,无需部署 WAR 文件
- 简化Maven配置
- 自动配置Spring
- 约定大于配置
- 依赖传递
2.maven构建Spring Boot项目
(1)创建maven工程,不要使用骨架
(2)编写pom.xml文件,继承springboot父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
(3)设置jdk版本,添加启动器
<dependencies>
<!-- springboot的web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
(4)创建启动类
- @SpringBootApplication: 当前类是一个引导类(此注解中使用诸多元注解修饰)
- SpringApplication.run(Application.class, args); 其返回值是一个Spring容器(ApplicationContext实现类)
- 启动类存放位置: 放置在所有代码父包同级目录下
package com.qfedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
(5)SpringBoot 启动器概述
-
所谓的springBoot 启动器其实就是一些 jar包的集合,SprigBoot一共提供 44 个启动器。例如:
-
spring-boot-starter-web:支持全栈式的 web 开发,包括了 tomcat 和 springMVC 等 jar
-
spring-boot-starter-jdbc:支持 spring 以 jdbc 方式操作数据库的 jar 包的集合
-
spring-boot-starter-redis:支持 redis 键值存储的数据库操作
-
3. 自定义banner
- 自定义SpringBoot项目启动时,所打印的形状
- 将
banner.txt
放置在resources
目录下 - 示例:
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 佛祖保佑 永不宕机 永无BUG //
4. Spring Boot的全局配置文件
(1)配置文件命名
- SpringBoot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下
- 源码:
(2)yml配置文件
- yml是 Spring Boot 中新增的一种配置文件格式。
- 特点:具备天然的树状结构
- yml与 properties的区别
- 配置文件的扩展名有变化
- 配置文件中的语法有变化:
- 在 yml 中使用“ : ”进行分割
- 在 yml中缩进时不允许使用tab键,缩进的空格数不重要,只要是左对齐的一列数据,都是同一个层级
- 每个K的冒号后面一定要加一个空格
(3)配置文件示例:
server:
port: 8090 #端口号
servlet:
context-path: /springboot #项目名
spring:
datasource: #数据库连接
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
#配置mybatis
mybatis:
type-aliases-package: com.qfedu.pojo
mapper-locations: classpath:mapper/*Mapper.xml
#配置日志
logging:
level:
com.qfedu.aop: debug
5. Spring Boot项目的发布方式
- 通过jar包发布
(1)在pom中添加一个SpringBoot的构建的插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(2)在maven面板视图中,选择“package”,在target中会产生xxx.jar包
(3)然后在cmd终端发布项目(jar包所在目录)
java -jar xxx.jar
二、Spring Boot注入方式
- 如何将将配置文件相关信息注入到数据源?????
- 全局配置文件:application.properties,写入数据库信息
1. @Value方式
SpringBoot配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:
-
@Configuration
:声明一个类作为配置类,代替xml文件 -
@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替<bean>
标签 -
使用
全局配置文件:application.properties
,不用显式引用配置文件(不需要使用注解@PropertySource),便可以直接使用全局配置文件信息 -
配置数据源
@Configuration
public class JdbcConfiguration {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
2. @ConfigurationProperties方式
声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到属性中
(从全局配置文件中读取:application.properties)- 创建属性读取类
(1)配置数据源 —— @Autowired注入
@Configuration
public class JdbcConfiguration {
@Autowired
private DbProperties dbProperties;
@Bean
public DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(dbProperties.getUrl());
dataSource.setDriverClassName(dbProperties.getDriverClassName());
dataSource.setUsername(dbProperties.getUsername());
dataSource.setPassword(dbProperties.getPassword());
return dataSource;
}
}
(2)配置数据源 —— @Bean方法的参数注入
@Configuration
public class JdbcConfiguration {
@Bean
//会去Spring容器中找到一个同类型的bean,注入到参数中
public DruidDataSource dataSource(DbProperties dbProperties) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(dbProperties.getUrl());
dataSource.setDriverClassName(dbProperties.getDriverClassName());
dataSource.setUsername(dbProperties.getUsername());
dataSource.setPassword(dbProperties.getPassword());
return dataSource;
}
}
3. SpringBoot默认注入方式
声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource属性中
@Configuration
public class JdbcConfiguration {
@Bean
// 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
4. SpringBoot中的默认配置
- 我们的项目中,已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:
非常多,几乎涵盖了现在主流的开源框架,例如:- redis
- jms
- amqp
- jdbc
- jackson
- mongodb
- jpa
- solr
- elasticsearch
… 等等
三、Spring Boot自动装配原理
- Springboot的自动装配实际上是通过 @EnableAutoConfiguration注解实现的,它用于修饰@SptingBootApplication注解
- 在@EnableAutoConfiguration中,通过@Import注解引入AutoConfigurationImportSelector类,在AutoConfigurationImportSelector类中提供了一个方法selectImports,通过此方法实现按需加载
- selectImports方法中,会根据引入的启动器,去加载/META-INF/目录下spring.factories文件中的部分配置类
- 在spring.factories文件中含有诸多的xxxAutoConfiguration配置类,在此配置类中会含有@ConditionalOnxxx注解,SpringBoot通过此注解实现按需加载,自动装配所需要的Bean
四、Spring Boot 整合Thymeleaf
1.Thymeleaf介绍
(1)什么是Thymeleaf
- Thymeleaf 是一个跟 Velocity、FreeMarker 类似的用Java语言编写的模板引擎,它基于模板和数据生成输出文本(HTML网页、WORD、XML,PDF或Java等)。
(2)为什么要使用Thymeleaf
- jsp访问实现页面展示,需要一系列编译,苏剧极慢
- 一般情况下只用于单体项目或后端数据测试
(3)thymeleaf的启动器
<!-- thymeleaf的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
(4)thymeleaf默认配置文件
导入相关启动器后,可以直接查询 XXXAutoConfiguration ,其中必定含有XXXProperties类,其里面含有相关默认配置
hymeleaf也会根据前缀和后缀来确定模板文件的位置:
- 默认前缀:
classpath:/templates/
- 默认后缀:
.html
Thymelaef特点:
-
语法:通过他特定标签操作html属性
-
目录位置:src/main/resources/templates
-
后缀名:.html
-
注意,把html 的名称空间,改成:
xmlns:th="http://www.thymeleaf.org"
会有语法提示
2. Thymeleaf 基本语法
(1)变量输出
- th:text 在页面中输出值
<span th:text="Hello"></span>
<hr/>
<span th:text="${msg} "></span>
- th:value 可以将一个值放入到input标签的value中
<input type="text" name="username" th:value="${msg}"/>
(2)日期和字符串处理
-
Thymeleaf 内置对象
-
注意语法:
-
调用内置对象一定要用#
-
大部分的内置对象都以 s 结尾 strings、numbers、dates
-
${}表达式一定是在
""
中生效的
-
日期处理:
- ${#dates.format(birth,‘yyyy-MM-dd’) 按照自定义的格式做日期转换(日期回选)
<input type="date" name="birth" th:value="${#dates.format(birth,'yyyy-MM-dd')}"/>
字符串处理:
<input type="text" name="msg" th:value="${#strings.substring(msg,0,6)}"/>
(3)条件判断
- th:if :判断条件是否满足
<span th:if="${sex=='男'}">
性别:男
</span>
(4)单选框按钮选中判断
- th:checked :其内取值为boolean型,true则选中,false则补选中
性别:<input type="radio" name="sex" value="1" th:checked="${user.sex==1}"/>男
<input type="radio" name="sex" value="0" th:checked="${user.sex==0}">女</br>
(5)迭代遍历
- th:each :实现集合遍历
<tr th:each="user : ${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.userName}"></td>
<td th:text="${user.password}"></td>
<td th:text="${user.sex==1?'男':'女'}"></td>
<td th:text="${#dates.format(user.birth,'yyyy-MM-dd')}"></td>
<td>
<button>删除</button>
<a th:href="@{/user/findOne/{id}(id=${user.id})}"><button>编辑</button></a>
</td>
</tr>
(5)URL表达式
- url表达式语法: 基本语法:@{}
/
:相当于当前项目的跟
~/
:相当于服务器的跟
- 在 url中实现参数传递
- 问号形式传参
- restful风格传参
- 域中参数回传(restful 风格)
- 问号形式传参
3. Thymeleaf 视图解析器优先级
(1)ThymeleafViewResolver视图解析器
- Thymeleaf 启动器默认含有一个视图解析器 ——
ThymeleafViewResolver
- 当我们不使用 Thymeleaf 启动器时,SpringBoot 默认使用的视图解析器(ViewResolver)是 ——
SpringMVC的视图解析器
- 当引入Thymeleaf 启动器之后,
ThymeleafViewResolver
的优先级会高于SpringMVC的视图解析器
(查看ThymeleafAutoConfiguration源码可知)
(2)Spring Boot 使用的视图解析器
- 若引用Thymeleaf 启动器后,默认会使用Thymeleaf的视图解析器,返回的视图、ModelAndView、Model等均使用
templates文件夹
下的资源不会访问Spring Boot的静态资源 - 若不引用Thymeleaf 启动器,则默认使用SpringMVC的视图解析器,但其默认的后缀不是
.html
结尾 - 体现:
-
SpringMVC的视图解析器后缀不是 —— .html,默认templates文件夹中的页面后缀是.html,且名称相同时,templates文件夹中的页面优先级高(引用Thymeleaf 启动器后)
-
只要存在Thymeleaf相关依赖,若是视图名称和templates文件夹中的页面名称相同,返回扫描templates文件夹中的页面就会优于静态资源下的视图页面(就算在配置文件中指定返回的后缀(spring.mvc.view.suffix=),SpringMVC视图解析器也不会生效)
-
若存在Thymeleaf相关依赖,想要实现页面跳转(跳转到静态资源包下),可以直接return /页面.html
-