Spring实战(第5版)核心知识点总结

1. Spring基础

1.1 Spring起步

Spring的核心是提供一个容器(container),又叫spring Application Context,会创建和管理bean,将bean装配在一起基于依赖注入(DI),依赖容器去创建和维护所有的组件,注入需要的bean中。
bean的注入方式:

  1. 构造器参数注入
    xml文件中, <constuctor-arg ref="" />
  2. setter注入
  3. 注解方式注入
    java配置 @Configuration 标注配置类,为spring应用上下文提供bean;@bean标注在方法返回的对象以bean的形式添加到spring应用的上下文中。
    借助spring的自动装配和组建扫描,可以自动发现应用类路径下的组件,并创建为bean;

Maven项目结构
项目源码 src/main/java 测试源码 src/test/java 非Java资源 src/main/resources
pom.xml maven构建规范;
Application.java SpringBoot主类,项目启动;
application.properties 指定配置属性

SpringBoot
@SpringBootApplication 包含

  • @SpringBootConfiguration 声明配置类,@Configuration的特殊形式;
  • @EnableAutoConfiguration 启用自动配置;
  • @ComponentScan 组件扫描,通过@Component @Controller @Service声明其他类,自动发现并注册组件

Spring自带一个Web框架,SpringMVC,核心是控制器,处理请求并以某种方式进行信息响应,填充数据模型并将请求传递给视图。@Controller @GetMapping 发送HTTP GET请求; @RequestMapping 类级别使用,通用的请求处理;

thymeleaf模版

添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

标签属性:
th:text 命名空间中的属性
th:each="XXX : ${} " 迭代元素集合
th:value 渲染设置value属性
th:src="@{/ }" 图片地址
<link rel="" th:href="@{/ }"/> 引用样式
<form method="POST" th:action="/" /> 提交url
th:if 条件语句

测试类
JUnit
@RunWith(SpringRunner.class) 测试运行器 @SpringBootTest
@WebMvcTest(XXController.class) 是SpringBoot提供的特殊测试注解,将某某注册到SpringMVC中;
注入MockMvc,实现mockup;mockMVC.perform(get("/"))发起对“/”的请求
.andExpect() 期望…;

1.2 开发Web应用

SpringMVC

  1. 构建领域类
    @Data 添加Lombok依赖,节省空间,并且运行时动态生成方法;
  2. 创建控制器类
    处理http请求,@RequestMapping("/") @GetMapping("/")要么将请求传递给视图渲染HTML,要么将数据写入响应体(RESTful);
    @Slf4j ,会自动生成一个SLF4J Logger。
  3. 设计视图–Thymeleaf模版
    添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 表单提交
  2. 控制器提交请求 @PostMapping
  3. 校验表单输入
    Spring支持java的bean校验VadidationAPI;
    @NotNull 非空 @Size 长度 @CreditCardNumber 合法的信用卡号 @Pattern 正则表达式
    @DIgits(integer=) 包含几位数字
    在表单绑定时执行校验,在方法的参数添加@Valid,告诉MVC这个参数要进行校验,校验时机是在绑定表单后,调用这个方法之前;如果失败,fields的hasErrors() 会检验是否有错误,th:errors="*{ }"

DevTools 好处
代码变更后应用会自动重启;
当面向浏览器的资源发生变化时,会自动刷新浏览器;
自动禁用模版缓存;
当DevTools运行时,应用程序会被加载到Java虚拟机两个独立的类加载器中,一个类加载器会加载代码,属性文件等,另一个加载依赖的库,当有变更时,只会重新加载包含项目代码的类加载器;

1.3 使用数据

处理关系型数据时,使用Spring的JDBC和JPA;

JDBC
添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

查询

jdbcTemplate.queryForObject() 返回一个对象
jdbcTemplate.query() 返回对象的集合h d s y y

插入

jdbcTemplate.update()

@SessionAttribute("")指定对象保存在session中,跨请求使用
@modelAttribute(name ="") 在模型中创建对象

Spring Data JPA
SpringData

  • SpringDataJPA 基于关系型数据库进行持久化
  • SpringDataMongo 持久化到Mongo文档数据库
  • SpringDataRedis 持久化Redis key-value存储

添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

@Entity 声明实体
@Id 唯一标识属性
@GeneratedValue(strategy = GenerationType.AUTO) 依赖数据库自动生成ID值
@NoArgsConstructor 无参构造器
@RequiredArgsConstructor 有参构造器
@PrePersist 在持久化前做…
@ManyToMany 表之间属性多对多关系
@Table(name = "") 持久化到某个表中

声明JPA的repository
扩展CrudRepository<持久化的实体类型,实体ID属性的类型>
运行时会自动生成实现类,SpringData解析方法名来确定要执行的查询

1.4 保护Spring

添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置SpringSecurity
应用启动时,添加依赖后,自动配置功能会探测,初始化基本的安全配置;
通过覆盖WebSecurityConfigurerAdapter基础配置类中定义的configure()方法来进行配置;
SpringSecurity为配置用户存储提供多个方案

  • 基于内存的用户存储
    AuthenticationManagerBuilder.inMemoryAuthentication()指定信息,调用withUser()配置一个用户(用户名),密码和授权信息通过password(),authorities()方法来指定;

  • 基于JDBC的用户存储
    用户信息一般在数据库维护,调用AuthenticationManagerBuilder.jdbcAuthentication().datasource();
    查找用户信息,可以自定义查询, 调用Auth...usersByUsernameQuery();
    密码存储需要使用转码后的密码,通过Auth...passwordEncoder()指定一个encoder密码转码器
    例如StandardPasswordEncode SHA-256哈希加密

  • 以LDAP作为后端的用户存储
    AuthenticationManagerBuilder.ldapAuthentication().userSearchFilter().groupSearchFilter()基础查询提供条件;
    引用远程的LDAP服务器Auth...contextSource().url("指定服务器地址")
    配置嵌入式的LDAP服务器 Auth...contextSource().root指定嵌入式服务器的前缀;

  • *自定义用户认证
    创建领域类实现SpringSecurity的UserDetails接口,会得到getAuthorities()等方法;
    定义repository接口extends CrudRepository<,>,定义一个findByUserName()方法;
    创建用户详情服务接口,实现SpringSecurity的UserDetailsService接口,返回UserDetails对象;
    回到configure方法中,注入userDetailsService,调用Auth.userDetailsService(),调用passwordEncoder()进行密码转码,查询用户信息;

保护Web请求
配置HttpSecurity常见的需求是拦截请求以确保用户具备适当的权限,

httpSecurity.authorizeRequests()
	.antMatchers("/")
		.hasRole("")

登录

.and()
	.formLogin()
		.loginPage("/")

退出

.and()
	.logout()
		.logoutSuccessUrl("/")

防止跨站请求伪造
SpringSecurity 提供了内置的CSRF(跨站请求伪造)保护,如果使用SpringMVC的jsp标签库或者thyme leaf方言,会自动生成包含CSRF token的隐藏域;

已认证用户的信息可以通过SecurityContext对象来获取,也可以用@AuthenticationPrincipal注入控制器中;

1.5 使用配置属性

Spring中有两种配置

  • bean装配:声明在Spring应用上下文中创建那些应用组件以及它们之间如何互相注入的配置;
  • 属性注入:设置Spring应用上下文中bean的值的配置;

环境抽象 application.yaml文件中
端口号

server:
	port: XXX

配置数据源

spring:
	datasource:
		url:
		username:
		password:

配置嵌入式服务器
任选一个可用的端口

server:
	port: 0

常见的对底层容器的设置就是处理HTTPS请求
JDK keytool命令生成keystore

$ keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA

配置日志
SpringBoot 通过Logback配置日志,INFO级别写入;

logging:
	file: / 
	level:
		root: WARN
		org.springframwork.security:DEBUG

创建自己的配置属性
@ConfigurationProperties(prefix=“XX.XX”)

XX:
	XX:
		属性值:XX

使用profile进行配置
application-{profile名}.yml
激活profile 使用环境变量来设置处于激活状态的profile;

% export SPRING_PROFILES_ACTIVE =prod,xx,xx

2. Spring集成

2.1 创建REST服务

创建RESTful控制器

  • @RestController
    能够让类被组件扫描功能发现,并且控制器中的所有处理器方法的返回值都要直接写入响应体中;

  • @Controller@ResponseBody
    这样返回的就是ResponseEntity对象;

  • @RequestMapping(path="/",produces={“application/json”,""})
    代表只会处理Accept头信息包含"application/json"的请求,限制API只生成JSON结果。

  • @CrossOrigin(origins="*")
    允许来自任何域的客户端消费该API

  • @PathVariable(“XX”) @GetMapping("/{/XX}") 对应

返回值设为ResponseEntity,有返回值则ok的HTTP状态,否则为NOT FOUND的状态;

发送数据到服务器端

  • @PostMapping(consumes=“application/json”)
    用于指定请求输入,只会处理相匹配的请求;
  • @RequestBody
    表示请求被转换,并绑定到该参数上,确保请求体中的JSON被绑定;

在服务器上更新数据

  • @PutMapping()
    对资源数据的大规模替换
  • @PatchMapping()
    只发送要改变的属性即可;

删除服务器上的数据

  • @DeleteMapping()

启用数据后端服务
添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

它会为Spring Data创建的repository自动生成REST API;
@RestResource(rel="",path="") 能为实体提供任何我们想要的关系名和路径;

分页与排序
http://localhost:8080/xx/xx/xx?sort=creatAt,desc&page=X&size=X

2.2 消费REST服务

  • RestTemplate Spring核心框架提供的简单、同步REST客户端
    使用Rest Template消费REST端点
    GET
    getForObject() 返回的是响应载荷的领域对象
    getForEntity() 返回的是包裹领域对象的ResponseEntity对象,能够访问更多的响应细节,比如响应头信息;
    PUT
    restTemplate.put()
    DELETE
    restTemplate.delete()
    POST
    postForLocation() 返回的是URL
    postForObject()
    postForEntity()
  • Traverson Spring HATEOAS支持超链接、同步的REST客户端
  • WebClient Spring5引入的反应式、异步REST客户端

2.3 发送异步消息

JMS

JMS发送消息
使用消息代理的通用API,基于JmsTemplate,消息生产方发送队列和主题消息,提供消息驱动POJO;
搭建环境,使用ActiveMQ;
添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

配置属性

spring:
	activemq:
		broker-url: 代理的url
		user: 访问代理的用户
		password: 密码
		in-memory: 是否在内存中运行代理,默认为true

send(),都需要MessageCreator来生成Message对象;
converAndSend()接受Object对象,自动转换为Message对象;

配置消息转换器 MessageConverter 有两个方法, ToMessage(),fromMessage()

接收JMS消息
receive() ;接收XX队列的消息;
receiveAndConvert() 不需要MessageConverter注入进来,转换操作在方法幕后进行;

声明消息监听器
@JmsListener(“xx.xx.quene”)
这个注解会等待消息抵达指定的目的地,当消息到达时,方法被自动被调用;优点是不会堵塞,快速处理多个消息;缺点是只能用在Java应用中;

RabbitMQ

RabbitMQ是AMQP最杰出的实现。JMS消息使用目的地来寻址,接收者要从这里检索消息;AMQP消息使用Exchange和routing key 来寻址,消息就与接收者要监听的对列解耦了;
当消息到RabbitMQ代理的时候,它会进入设置的Exchange上,由它负责路由到一个或多个队列中,过程会根据Exchange的类型,Exchange和队列之间的blinding,消息的routing key 进行路由;
添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置属性

spring:
	rabbitmq:
		host:
		port:
		username:
		password:

RabbitTemplate发送消息和接收消息基本同JMS;
@RabbitListener("")消息监听器

Kafka

为集群运行设计,可扩展性很强,仅使用主题实现消息的发布/订阅;

3. 反应式Spring

4. 云原生Spring

5. 部署Spring

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringBoot实战(第4)清晰文字,第 1 章 入门 ................................................ 1 1.1 Spring 风云再起 ........................................ 1 1.1.1 重新认识 Spring ............................ 2 1.1.2 Spring Boot 精要 ........................... 3 1.1.3 Spring Boot 不是什么 ................... 6 1.2 Spring Boot 入门 ....................................... 6 1.2.1 安装 Spring Boot CLI .................... 7 1.2.2 使用 Spring Initializr 初始化 Spring Boot 项目 .......................... 10 1.3 小结 ......................................................... 18 第 2 章 开发第一个应用程序 .................... 19 2.1 运用 Spring Boot ..................................... 19 2.1.1 查看初始化的 Spring Boot 新项目 .......................................... 21 2.1.2 Spring Boot 项目构建过程 解析 .............................................. 24 2.2 使用起步依赖 .......................................... 27 2.2.1 指定基于功能的依赖 ................... 28 2.2.2 覆盖起步依赖引入的传递依赖 .... 29 2.3 使用自动配置 .......................................... 30 2.3.1 专注于应用程序功能 ................... 31 2.3.2 运行应用程序 .............................. 36 2.3.3 刚刚发生了什么 ........................... 38 2.4 小结 ......................................................... 41 第 3 章 自定义配置 .................................... 42 3.1 覆盖 Spring Boot 自动配置 ..................... 42 3.1.1 保护应用程序 .............................. 43 3.1.2 创建自定义的安全配置 ............... 44 3.1.3 掀开自动配置的神秘面纱 ........... 48 3.2 通过属性文件外置配置 ........................... 49 3.2.1 自动配置微调 .............................. 50 3.2.2 应用程序 Bean 的配置外置 ......... 55 3.2.3 使用 Profile 进行配置 .................. 59 3.3 定制应用程序错误页面 ........................... 62 3.4 小结 ......................................................... 64 第 4 章 测试 ............................................... 66 4.1 集成测试自动配置 .................................. 66 4.2 测试 Web 应用程序 ................................. 68 4.2.1 模拟 Spring MVC ........................ 69 4.2.2 测试 Web 安全 ............................. 72 4.3 测试运行中的应用程序 ........................... 74 4.3.1 用随机端口启动服务器 ............... 75 4.3.2 使用 Selenium 测试 HTML 页面 ............................................. 76 4.4 小结 ......................................................... 78 第 5 章 Groovy 与 Spring Boot CLI ......... 80 5.1 开发 Spring Boot CLI 应用程序 .............. 80 5.1.1 设置 CLI 项目 .............................. 81 5.1.2 通过 Groovy 消除代码噪声 ......... 81 5.1.3 发生了什么 .................................. 85 5.2 获取依赖 .................................................. 86 5.2.1 覆盖默认依赖本 ....................... 87 5.2.2 添加依赖仓库 .............................. 88 5.3 用 CLI 运行测试 ...................................... 89 5.4 创建可部署的产物 .................................. 91 5.5 小结 ......................................................... 91 第 6 章 在 Spring Boot 中使用 Grails ...... 93 6.1 使用 GORM 进行数据持久化 ................. 93 2 目 录 6.2 使用 Groovy Server Pages 定义视图 ....... 98 6.3 结合 Spring Boot 与 Grails 3 ................. 100 6.3.1 创建新的 Grails 项目 ................. 100 6.3.2 定义领域模型 ............................ 103 6.3.3 开发 Grails 控制器 ..................... 104 6.3.4 创建视图 .................................... 105 6.4 小结 ....................................................... 107 第 7 章 深入 Actuator .............................. 108 7.1 揭秘 Actuator 的端点 ............................ 108 7.1.1 查看配置明细 ............................ 109 7.1.2 运行时度量 ................................ 115 7.1.3 关闭应用程序 ............................ 121 7.1.4 获取应用信息 ............................ 121 7.2 连接 Actuator 的远程 shell .................... 122 7.2.1 查看 autoconfig 报告 ........... 123 7.2.2 列出应用程序的 Bean ............... 124 7.2.3 查看应用程序的度量信息 ......... 124 7.2.4 调用 Actuator 端点 .................... 125 7.3 通过 JMX 监控应用程序 ....................... 126 7.4 定制 Actuator......................................... 128 7.4.1 修改端点 ID ............................... 128 7.4.2 启用和禁用端点 ........................ 129 7.4.3 添加自定义度量信息 ................. 129 7.4.4 创建自定义跟踪仓库 ................. 132 7.4.5 插入自定义健康指示器 ............. 134 7.5 保护 Actuator 端点 ................................ 136 7.6 小结 ....................................................... 138 第 8 章 部署 Spring Boot 应用程序 ........ 139 8.1 衡量多种部署方式 ................................ 139 8.2 部署到应用服务器 ................................ 140 8.2.1 构建 WAR 文件 ......................... 141 8.2.2 创建生产 Profile ........................ 142 8.2.3 开启数据库迁移 ........................ 145 8.3 推上云端 ............................................... 150 8.3.1 部署到 Cloud Foundry ............... 150 8.3.2 部署到 Heroku ........................... 153 8.4 小结 ....................................................... 155 附录 A Spring Boot 开发者工具.............. 157 附录 B Spring Boot 起步依赖 ................. 163 附录 C 配置属性 ...................................... 169 附录 D Spring Boot 依赖 ......................... 202

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值