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请求
posted @ 2022-06-09 00:35  tensor_zhang  阅读(7)  评论(0编辑  收藏  举报