第一章 Spring起步
- 起初最常见的应用形式是基于浏览器的Web应用,后端由关系型数据库作为支撑。
- 现在感兴趣的还包括如何开发面向云的由微服务组成的应用
- 还有反应式编程,致力于通过非阻塞操作提供更好地扩展性并提升性能
1.1 什么是Spring
任何实际的应用程序都是由很多组件组成的,当应用程序运行时,需要以相应的方式创建并引入对应的组件。
Spring的核心是提供了一个容器(container),也可称为Spring应用上下文(Spring application context),通过容器来创建和管理应用组件,这些组件也可以称为bean,会在容器中装配在一起,从而形成一个完整的应用程序。
- 刚开始,指导Spring应用上下文将bean装配在一起的方式是使用一个或多个xml文件(描述一个组件以及它们与其他组件的关联关系)。
- 后来基于Java的配置更为常见,@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法使用@Bean注解进行标注,表名这些方法所返回的对象会以bean的形式添加到Spring的应用上下文中(默认情况下,这些bean所对应的bean ID与定义他们的方法名称是相同的)
基于Java配置比基于xml配置有更多的额外收益,不过两者均为显示配置,所以这两种配置方式只有在Spring不能进行自动配置时才会考虑使用。
在Spring技术中,自动配置(autoconfiguration)起源于所谓的自动装配(autowiring)和组件扫描(component scanning)。借助组件扫描技术,Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。借助自动装配技术,Spring能够自动为组件注入它们所依赖的其它组件。Spring Boot是Spring框架的扩展,自动配置(autoconfiguration)最为人所熟知。
1.2 初始化Spring应用
1.2.2 检查Spring项目的结构
mnvw和mnvw.cmd:这是Maven包装器(wrapper)脚本。借助这些脚本,即便电脑上没有安装Maven,也可以构建项目。
在pom.xml文件中,packaging选择将应用构建成一个可执行的JAR文件,这是默认方式,也可自行修改成WAR文件。
<groupId>lml</groupId>
<artifactId>blog</artifactId>
<version>3.0.2</version>
<packaging>jar</packaging>
Spring Boot的引导类
package com.lml;
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);
}
}
其中,@SpringBootApplication注解明确表明这是一个Spring Boot应用,同时这是一个组合注解,组合了其它3个注解
- @SpringBootConfiguration:将该类声明为配置类。尽管这个类目前还没有太多的配置,但是可以按需添加基于Java的Spring框架配置,这个注解实际上是@Configuration注解的特殊形式。
- @EnableAutoConfiguration:启用SpringBoot的自动配置,这个注解会告诉Spring Boot自动配置它认为我们会用到的组件。
- @ComponentScan:启用组件扫描。这样我们能够通过像@Component、@Controller、@Service这样的注解声明其他类,Spring会自动发现它们并将它们注册为Spring应用上下文中的组件。
其中的main()方法会调用Application中静态的run()方法,后者会真正执行应用的引导过程,也就是创建Spring的应用上下文。在传递给run()的两个参数中,一个是配置类,另一个是命令行参数。尽管传递给run()的配置类不一定要和引导类相同,但这是最便利和最典型的做法。
1.3 编写Spring应用
1.3.1 处理Web请求
Spring自带一个强大的Web框架,名为Spring MVC。Spring MVC的核心是控制器(controller)。控制器是处理请求并以某种方式进行信息响应的类。在面向浏览器的应用中,控制器会填充可选的数据模型并将请求传递给一个视图,以便于生成返回给浏览器的HTML。
@Controller、@Component、@Service、@Repository等注解的主要目的是让组件扫描将这个类识别为一个组件,带有这个注解时Spring的组件扫描功能会自动发现它,并创建一个相应的类实例作为Spring应用上下文中的bean。
1.3.2 定义视图
使用thymeleaf模版需要先在pom.xml文件中添加相应依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后在新建的html头文件中,添加thymeleaf的网址,否则使用thymeleaf语法时,会报红
<html lang="en" xmlns:th="http://www.thymeleaf.org">
浏览器自动刷新和禁用模板缓存
完成上述两步操作后,在application.properties配置文件中禁用模板缓存即可
# 禁用模版引擎缓存
spring.thymeleaf.cache=false
第二章 开发Web应用
2.1 展现信息
在Spring Web应用中,获取和处理数据是控制器的任务,而将数据渲染到HTML中并在浏览器中展现则是视图的任务。
2.1.1 构建领域类
<dependency>
<groupId>org.projectlombok></groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2.1.2 创建控制器类
Model对象负责在控制器和展现数据的视图之间传递数据。
2.1.3 设计视图
使用thymeleaf模版需要在html文件的标签中添加以下内容,否则使用相应标签时,th字段会报红
<html xmlns:th="http://www.thymeleaf.org">
- "th:text"是Thymeleaf命名空间中的属性
- ${ }会告诉Thymeleaf模板要使用某个请求属性中的值。
2.2 处理表单提交
@Data注解
2.3 校验表单输入
2.3.1 声明校验规则
@NotBlank
正则表达式
2.3.2 在表单绑定的时候执行校验
@Valid