Spring实战
Spring5 学习记录。
SpringBoot刚出来时用过一点,从Spring Boot2回看,发现这个生态真是进步巨大。
起步
项目初始化
Initializr
- https://start.spring.io/
- curl
- Spring Boot cli
- Spring Tool Suite
- IntelliJ IDEA
- VS Code + 插件
依赖管理
名字包含starter的依赖并不包含实际的代码库,只是为了方便项目依赖版本管理。
运行
- java -jar xxx.jar
- mvn spring-boot:run
- Spring Dashboard
学习笔记
Spring Boot带来的好处:
-
starter dependencies
-
autoconfiguration
-
Actuator运行时信息监控
-
灵活的环境配置
-
增强的测试支持
-
尽量使用Spring Boot,必要时显示声明Java样式的配置。
-
components或叫做beans支持在Spring application context显式定义为Java或XML(旧格式)
-
Component Scanning:用于自动发现并为Spring application context创建bean
常用注解:
- @Controller
- @Component
- @Service
- @Repository
Model模型
MVC.
@ModelAttribute
View模板
不推荐使用后端模板引擎,建议前后端分离。
开发环境禁用缓存:
# application.properties
spring.freemarker.cache=false
spring.thymeleaf.cache=false
FreeMarker
Mustache
Thymeleaf
这个项目代码上次更新还是一年前(2018年10月),还是远离这个模板的好。
@{…} 操作符代表一个context-relative路径
JSP
官方强烈不推荐JSP,因为它的依赖实现通常是容器做的(Tomcat,Jetty等),且默认只识别WEB-INF文件夹。
这意味着只支持war包的形式,使用将非常受限。
Controller
- RestController : Rest接口服务
路由
- @RequestMapping 用于类
- @GetMapping等用于handler方法
- 返回的通常是视图的逻辑名
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
}
HTTP请求
- @PathVariable(“name”) : 请求URL变量
- @RequestParam : 请求参数,包含 query parameters, form parameters, files
- @RequestBody : 请求payload
数据类
Validation
字段验证:
- @NotNull
- @Size
- @NotBlank
- @Digits
- @Pattern 正则
Hibernate内置:
- @CreditCardNumber
添加在数据类前:
- @Valid
测试
pom.xml依赖于spring-boot-starter-test。
注: 2.0.9依赖于JUnit4, 但2.2.x分支已切换到JUnit5.
- @SpringBootTest
- @WebMvcTest
辅助工具
- spring-boot-devtools
- 自动重启(类修改)
- ~/.spring-boot-devtools.properties 全局设置