Spring0-读书笔记
0,书籍
1,Spring生态总览
- Spring核心框架
- Spring核心框架是Spring领域中一切的基础。它提供了核心容器和依赖注入框架,另外还提供了一些其他重要的特性。
- Spring MVC
- Spring的web框架,可以使用Spring MVC来编写控制器类以处理Web请求;还能用来创建REST API,以生成非HTML的输出。
- 数据持久化框架
- Spring核心框架还提供了一些对数据持久化的基础支持,尤其是基于模板的JDBC支持。
- 反应式(reactive)编程框架
- 比如名为Spring WebFlux的新反应式Web框架,这个框架大量借鉴了Spring MVC。
- Spring Boot
- 依赖引入、自动配置
- 洞察应用运行时的内部工作状况(Actuator),包括指标、线程dump信息、应用的健康状况以及应用可用的环境属性
- 灵活的环境属性规范
- 在核心框架的测试辅助功能之上提供了对测试的额外支持
- 一个基于Groovy脚本的编程模型-Spring Boot命令行接口(Command-LineInterface,CLI),使用Spring Boot CLI,可以将整个应用程序编写为Groovy脚本的集合,并通过命令行运行它们。
- Spring Data
- Spring核心框架提供了基本的数据持久化支持,但Spring Data能够实现将应用程序的数据repository定义为简单的Java接口,在定义驱动存储和检索数据的方法时使用一种命名约定即可。
- 此外,Spring Data能够处理多种不同类型的数据库,包括关系型数据库(JPA)、文档数据库(Mongo)、图数据库(Neo4j)等。
- Spring Security
- Spring的安全框架,包括身份验证、授权和API安全性等。
- Spring Integration和Spring Batch
- Spring Integration和Spring Batch为基于Spring的应用程序提供了应用程序集成模式的实现。
- Spring Integration解决了实时集成问题。在实时集成中,数据在可用时马上就会得到处理。
- Spring Batch解决的则是批处理集成的问题,在此过程中,数据可以收集一段时间,直到某个触发器(可能是一个时间触发器)发出信号,表示该处理批量数据了才会对数据进行批处理。
- Spring Cloud
- 云原生,微服务:不再将应用程序作为单个部署单元来开发,而是使用由微服务组成的多个独立部署单元来组合形成应用程序。
2,Spring web应用
- 在Spring Web应用中,获取和处理数据是控制器的任务,而将数据渲染到HTML中并在浏览器中展现则是视图的任务。
- 控制器(Controller)
- 主要职责是处理HTTP请求,然后将处理请求所得数据传递给视图以便于渲染HTML(浏览器展现),或者直接将数据写入响应体(RESTful)。
- 视图
- Spring提供了多种定义视图的方式,包括JavaServer Pages(JSP)、Thymeleaf、FreeMarker、Mustache和基于Groovy的模板。
- 像Thymeleaf这样的视图库在设计时是与特定的Web框架解耦的。这样的话,它们无法感知Spring的模型抽象,因此无法与控制器放到Model中的数据协同工作。但是,它们可以与Servlet的request属性协作。所以,在Spring将请求转移到视图之前,它会把模型数据复制到request属性中,Thymeleaf和其他的视图模板方案就能访问到它们了。
N,一些库和注解
- Lombok:类级别的@Data注解,告诉Lombok生成所有缺失的方法:private属性的setter,getter方法,以及equals()、hashCode()、toString()等方法,同时还会生成所有以final属性作为参数的构造器。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
import lombok.Data;
import lombok.RequiredArgsConstructor;
import java.lang.reflect.Type;
@Data
@RequiredArgsConstructor
public class Ingredient {
private final String id;
private final String name;
private final Type type;
public static enum Tyep{
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
}
@Slf4j
:这是Lombok所提供的注解,在运行时,它会在这个类中自动生成一个SLF4J(Simple LoggingFacade for Java)Logger。这个简单的注解和在类中通过如下代码显式声明的效果是一样的:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(***.class);
@Controller
:这个注解会将相应类识别为控制器,并且将其作为组件扫描的候选者,Spring会发现该候选者并自动创建对应实例,并将该实例作为Spring应用上下文中的bean。@RequestMapping
:当@RequestMapping
注解用到类级别的时候,它能够指定该控制器(被注解的类的实例,比如由@Controller
所创建的实例)所处理的请求类型。@GetMapping
:对类级别的@RequestMapping
进行了细化。@GetMapping
结合类级别的@RequestMapping
,指明当接收到对注明的请求类型的HTTP GET请求时,将会调用被注解的方法来处理请求。@GetMapping
是一个相对较新的注解,是在Spring 4.3引入的。在Spring 4.3之前,你可能需要使用方法级别的@RequestMapping
注解作为替代:@RequestMapping(method = RequestMethod.GET)
- 在类级别上使用
@RequestMapping
,以便于指定基本路径。在每个处理器方法上,使用更具体的@GetMapping
、@PostMapping
等注解。
- Spring MVC中所有可用的请求映射注解:
Spring注解 | 对应的请求 |
---|---|
@RequestMapping |
通用的请求处理 |
@GetMapping |
处理HTTP GET请求 |
@PostMapping |
处理HTTP POST请求 |
@PutMapping |
处理HTTP PUT请求 |
@DeleteMapping |
处理HTTP DELETE请求 |
@PatchMapping |
处理HTTP Patch请求 |
行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧。