《Spring Guides系列学习》guide51 - guide55

news2025/1/11 3:37:18

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。

在这里插入图片描述
接着上篇看过的guide50,接着往下看。

guide51、Consuming a SOAP web service

使用soap服务,了解几个概念:

SOAP是一种基于XML的通信协议,用于在Web服务之间进行交互。它定义了一种规范的消息格式,可以在不同操作系统、编程语言和网络环境中进行互操作。

SOAP最初是用于在Web服务之间进行消息传递的,它使用XML格式来封装请求和响应消息,通常使用HTTP协议进行传输。SOAP消息由一个包含消息头和消息体的XML文档组成。在SOAP消息中,消息头包含了一些元素,如消息ID、时间戳、安全信息等,用于描述消息的属性和元数据。消息体则包含了实际的请求或响应数据,通常使用XML格式进行编码。

WSDL是Web服务描述语言(Web Services Description
Language)的缩写,它是一种XML格式的文档,用于描述Web服务的接口、消息、数据类型和服务地址等信息,以便各种平台上的应用程序可以相互交互。

SOAP(简单对象访问协议)和WSDL(Web服务描述语言)都是用于构建Web服务的技术,但它们的作用不同:

  1. SOAP是一种基于XML的协议,用于在Web服务之间进行数据交换。它定义了一种标准的消息格式,包括消息头和消息体,并且支持多种传输协议,如HTTP、SMTP等。SOAP可以保证数据的可靠性和安全性,但是消息格式比较复杂。
  2. WSDL是一种XML格式的文档,用于描述Web服务的接口、消息、数据类型和服务地址等信息。它为客户端应用程序提供了一个清晰的视图,使它们可以了解Web服务的接口和操作,并生成相应的代码以便与Web服务进行交互。WSDL可以帮助开发人员构建和发布Web服务,并且可以提高Web服务的互操作性。

需要注意的是,SOAP和WSDL通常是一起使用的,因为WSDL描述了Web服务的接口和操作,而SOAP定义了Web服务之间的消息格式和传输协议。开发人员可以使用WSDL来生成客户端代码,然后使用SOAP协议来进行数据交换。


可以对比下json

JSON是一种轻量级的数据交换格式,它基于JavaScript语言的子集,可以被广泛地应用于Web应用程序之间的数据交换。
JSON格式的数据由键值对组成,键和值之间使用冒号分隔,不同的键值对之间使用逗号分隔,整个数据使用大括号包围。

SOAP和JSON都是用于Web服务之间进行数据交换的格式,但它们有以下不同点:

数据格式:SOAP使用XML格式来封装请求和响应消息,而JSON使用键值对的格式来描述数据。
复杂性:SOAP的消息格式比JSON更加复杂,需要包含一些元素,如消息头、消息体等,而JSON的格式更加简单明了。
可读性:JSON格式的数据比SOAP更加易读易写,因为它使用了简洁的语法,并且可以被轻松地解析和序列化。
互操作性:SOAP可以在不同的操作系统、编程语言和网络环境中进行互操作,但需要使用一些规范化的机制,如WSDL、XML Schema等。而JSON的互操作性更加简单,因为它已经被广泛地应用于各种编程语言和平台中。

guide52、Accessing Neo4j Data with REST

使用 Spring Data REST创建和检索存储在Neo4j NoSQL 数据库中的对象Person。Spring Data REST 采用了Spring HATEOAS和Spring Data Neo4j的特性,并自动将它们组合在一起。

Spring Data REST 还支持Spring Data JPA、Spring Data Gemfire和Spring Data MongoDB作为后端数据存储

1、首先是本地安装neo4j,然后启动
在这里插入图片描述

2、配置文件写上:

spring.neo4j.uri=bolt://localhost:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=secret

3、创建一个域对象

@Node
public class Person {
  @Id @GeneratedValue 
  private Long id;
  private String firstName;
  private String lastName;
  ...

创建一个域对象的存储库:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>, CrudRepository<Person, Long> {
  List<Person> findByLastName(@Param("name") String name);
}

@RepositoryRestResource 是 Spring Framework 中的一个注解,用于将一个 repository 接口暴露为 RESTful 资源。它可以用于自定义 repository 暴露的 REST 端点及其行为。默认情况下,它将 repository 映射到一个基于实体名称的 URL 上,但可以自定义使用不同的 URL,提供自定义查询方法等。它在 Spring Data REST 项目中被广泛使用。

4、启动程序

@EnableTransactionManagement
@EnableNeo4jRepositories
@SpringBootApplication
public class AccessingNeo4jDataRestApplication {
  public static void main(String[] args) {
    SpringApplication.run(AccessingNeo4jDataRestApplication.class, args);
  }
}

@EnableNeo4jRepositories 是 Spring Data Neo4j 中的一个注解,用于启用 Neo4j 存储库的自动配置。它告诉 Spring 在应用程序上下文中扫描包以查找存储库,并创建存储库的实例。它还允许配置存储库的基本包路径和类型。

@EnableTransactionManagement 是 Spring Framework 中的一个注解,用于启用 Spring 的事务管理功能。它告诉 Spring 在应用程序上下文中启用注解驱动的事务管理,以便可以使用 @Transactional 注解来标记事务边界。它还允许配置事务管理器、事务属性等。

可以直接访问
在这里插入图片描述
显示了程序所提供的功能,http://localhost:8080/people,并且还提供page、size、sort等选项。

Spring Data REST 使用HAL 格式进行 JSON 输出。它很灵活,并提供了一种方便的方式来提供与所服务的数据相邻的链接。

可以调用接口,新建一个people对象, 如下:

在这里插入图片描述

根据返回的地址链接,查看单个people

在这里插入图片描述


guide53、Accessing Data in Pivotal GemFire with REST

和上篇讲的基本一致,就是把底层数据存储结构变为了Pivotal GemFire。

Pivotal GemFire是一种内存数据网格(In-Memory Data Grid)和分布式系统,由Pivotal公司开发。它提供了一个高性能、高可用性和可扩展性的数据管理平台,可以处理大规模数据和实时数据流。Pivotal
GemFire使用分布式内存架构,可以将数据存储在多个节点中,从而提高数据访问速度和可靠性。它还提供了一些高级功能,如数据分区、事件处理、分布式查询和事务处理等,使得开发者可以轻松地构建复杂的分布式应用程序。Pivotal GemFire广泛应用于金融、电信、医疗保健、航空航天等领域。

Apache Geode(原名GemFire)

首先域对象:

@Data
@Region("People")
public class Person {
  private static AtomicLong COUNTER = new AtomicLong(0L);
  @Id
  private Long id;
  private String firstName;
  private String lastName;
  ...

@Region(“People”) 是一个注解,用于将Java类或接口声明为一个 Apache Geode 或 Pivotal GemFire 区域(Region)。在Geode或GemFire中,Region是一种分布式缓存数据结构,它将键值对存储在一个或多个节点的内存中,并提供了高性能、高可用性和可扩展性的数据访问方式。

基于域对象的存储库:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends CrudRepository<Person, Long> {
  List<Person> findByLastName(@Param("name") String name);
}

和上篇的存储库没啥区别。

启动类:

@SpringBootApplication
@ClientCacheApplication(name = "AccessingGemFireDataRestApplication")
@EnableEntityDefinedRegions(
  basePackageClasses = Person.class,
  clientRegionShortcut = ClientRegionShortcut.LOCAL
)
@EnableGemfireRepositories
@SuppressWarnings("unused")
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

@SuppressWarnings(“unused”)是Java中的一个注解,它用于告诉编译器忽略未使用的变量、方法、参数或导入声明等产生的警告信息。

@EnableGemfireRepositories是Spring Data GemFire框架中的一个注解,用于启用GemFire数据存储库(repositories)的支持。GemFire数据存储库是一种Spring Data抽象,它为应用程序提供了一种将数据存储在GemFire分布式缓存中的方式。通过使用@EnableGemfireRepositories注解,Spring Data GemFire可以自动为应用程序生成GemFire数据存储库的实现,并将其注册到Spring应用程序上下文中。

@EnableEntityDefinedRegions是Spring Data Geode框架中的一个注解,用于声明一个或多个实体类作为Geode区域(Region)的模板,并启用实体类和区域之间的映射。

@ClientCacheApplication是Spring Data GemFire框架中的一个注解,用于自动配置和启动一个客户端GemFire缓存实例。客户端GemFire缓存实例是一个连接到一个或多个GemFire服务器的本地缓存,它可以使用Spring Data GemFire提供的各种功能来访问和操作GemFire分布式缓存中的数据。

看下测试结果:

在这里插入图片描述
创建一个新的people:
在这里插入图片描述
就可以查看所有人了, 或者指定id查询
在这里插入图片描述
在这里插入图片描述


guide54、Caching Data with Spring

怎么使用spring缓存bean,其实核心还是@cacheable、@cacheput等注解。

实例:

先构建简单的对象bean:

public class Book {
  private String isbn;
  private String title;
  ... 

创建一个存储库:

public interface BookRepository {
  Book getByIsbn(String isbn);
}

@Component
public class SimpleBookRepository implements BookRepository {
  @Override
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }
  private void simulateSlowService() {
    try {
      long time = 3000L;
      Thread.sleep(time);
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    }
 }

在写一个commandLineRunner类,启动程序后能自动执行:

@Component
public class AppRunner implements CommandLineRunner {
  private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);
  private final BookRepository bookRepository;
  public AppRunner(BookRepository bookRepository) {
    this.bookRepository = bookRepository;
  }

  @Override
  public void run(String... args) throws Exception {
    logger.info(".... Fetching books");
    logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
    logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
    logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
  }

查看结果:
在这里插入图片描述

下面在加入缓存试试,在simpleBookRepository中给getByIsbn方法加上注解@Cacheable

  @Override
  @Cacheable("books")
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }

启动类也加上@EnableCaching注解

@SpringBootApplication
@EnableCaching
public class CachingApplication {
  public static void main(String[] args) {
    SpringApplication.run(CachingApplication.class, args);
  }

看看结果:

在这里插入图片描述

Spring为我们提供了几个注解来支持Spring Cache。其核心主要是@Cacheable和@CacheEvict。使用@Cacheable标记的方法在执行后Spring Cache将缓存其返回结果,而使用@CacheEvict标记的方法会在方法执行前或者执行后移除Spring Cache中的某些元素。


@Cacheable注解:@Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。


@Cacheput注解:与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。


@CacheEvict注解:是Spring框架中的一个注解,用于从缓存中删除一个或多个缓存条目。它可以用于标记在方法上,当方法执行成功后,将清除指定的缓存条目。

举例:
@CacheEvict(value = "users", key = "#id")
public void deleteUser(long id) {
    // delete user from database
}
这个例子中,当deleteUser方法成功执行后,@CacheEvict注解将清除名为"users"的缓存中键为id的缓存条目。

参考文档:https://www.cnblogs.com/fashflying/p/6908028.html


guide55、Working a Getting Started guide with IntelliJ IDEA

用intelliJ IDEA打开一个guide工程,我一直都是用Intellij打开的。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/578386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络设备的部署(串行与并行)

串行设备 1.防火墙&#xff1a;能够实现区域隔离和访问控制 2.IPS(入侵防御系统)&#xff1a;能够检测入侵行为并阻断 3.WAF&#xff08;上网行为管理设备&#xff09;&#xff1a;保障web应用的安全 4.上网行为管理设备&#xff1a;对用户上网行为进行控制 5.FC交换机&am…

【源码解析】SpringBoot使用Nacos配置中心和使用 @NacosValue 进行热更新

SpringBoot使用Nacos 引入依赖 <dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version> </dependency>增加本地配置 nacos:config:server-…

通过 ChatGPT 制作一个短视频

图文&#xff0c;生成视频 当通过 ChatGPT 生成连贯的 prompt 时&#xff0c;除了连环画&#xff0c;我们理所当然还可能畅想更激进的场景——生成动画视频。目前 AIGC 社区确实在生成视频方面有一定的尝试。比如 Deforum 可以通过多条 prompt&#xff0c;配合具体的切换时间点…

Centos7中mysql安装配置

前提&#xff1a;先关闭防火墙或开启tcp的3306端口 1、查看服务器上是否有现成的安装包 yum list mysql* 2、去mysql官网的yum资源库找到对应的rpm文件的下载链接 确定系统版本 cat /etc/redhat-release 到mysql官网复制对应版本的资源下载链接 MySQL :: Download MySQL Yum…

chatgpt赋能python:Python长连接详解:优化用户体验和节约资源的有效方式

Python长连接详解&#xff1a;优化用户体验和节约资源的有效方式 Python语言具备多样性和灵活性&#xff0c;是内容和功能极其丰富的一种编程语言。对于网站或者应用程序的开发&#xff0c;在Python语言的基础上可以实现长连接&#xff0c;优化用户体验和节约资源&#xff0c;…

网站部署与上线(1)虚拟机

文章目录 .1 虚拟机简介2 虚拟机的安装 本章将搭建实例的生产环境&#xff0c;将所有的代码搭建在一台Linux服务器中&#xff0c;并且测试其能否正常运行。 使用远程服务器进行连接&#xff1b; 基本的Linux命令&#xff1b; 使用Nginx搭建Node.js服务器&#xff1b; 在服务器端…

Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新

我的学习笔记 - 9iAdmin.NET 欢迎学习交流&#xff08;一&#xff09;前端笔记1.1 关于.env的设置1.2 关于路由模式问题1.3 关于 vue.config.ts1.4 关于 打包&#xff08;pnpm run build&#xff09;溢出问题1.5 关于 打包&#xff08;pnpm run build&#xff09;后部署到IIS重…

你知道网速的发展史吗? 80年代的我们是这样上网的!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

C++:征服C指针:指针(一)

关于指针 1.看一个简单的程序&#xff0c;来接触下指针2. 常见疑问&#xff1a;指针就是地址&#xff0c;那么int的指针和double的指针有什么区别 了3. 常见疑问&#xff1a;指针运算4. 为什么存在奇怪的指针运算符5. 试图将数组作为函数的参数进行传递。6. 什么是空指针5.1 声…

怎样用一周时间研究 ChatGPT

我是怎样用一周时间研究 ChatGPT 的&#xff1f; 上周大概开了 20 多个会&#xff0c;其中有一些是见了觉得今年可能会比较活跃出手的机构&#xff0c;其余见的绝大多数是和 ChatGPT 相关。 我后面就以 ChatGPT 为例&#xff0c;讲下我是如何快速一周 cover 一个赛道的&#x…

GDB 基础使用与多进程调试

​ GDB 全称“GNU symbolic debugger”是 Linux 下常用的程序调试器&#xff0c;当下的 GDB 支持调试多种编程语言编写的程序&#xff0c;包括 C、C、Go、Objective-C、OpenCL、Ada 等。 01 GDB 基础调试 1.1 基础使用 安装工具 # 安装 gcc sudo yum install gcc # 安装 g s…

记录一次el-table动态添加删除列导致表格样式错误(或不聚集)问题

记录一次el-table动态添加删除列导致表格样式错误问题 需求背景出现的问题解决方案理论&#xff1a;在el-table中设置key值&#xff0c;重新赋值表格数据之后&#xff0c;更新key值&#xff0c;达到动态更新效果 需求背景 一个电商类商品管理平台&#xff08;类似shopify产品编…

2023 华为 Datacom-HCIE 真题题库 06--含解析

多项选择 1.[试题编号&#xff1a;190185] &#xff08;多选题&#xff09;如图所示&#xff0c;PE 1和PE2之间通过Loopback0接口建立MP-BGP邻居关系&#xff0c;在配置完成之后&#xff0c;发现CE1和CE2之间无法互相学习路由&#xff0c;以下哪些项会导致该问题出现? A、PE1…

初识linux之简单了解TCP协议与UDP协议

目录 一、理解源IP地址和目的IP地址 二、端口号 1. 为什么要有端口号 2. 理解端口号 3. 源端口号和目的端口号 三、初步了解TCP协议和UDP协议 1. 初步认识TCP协议 2. 初步认识UDP协议 3. 可靠传输与不可靠传输 四、网络字节序 1. 网络字节序的概念 2. 如何形成网络…

python+django电子笔记交易系统vue

编码使用python&#xff08;我的pycharm版本是2021.3.3&#xff09;&#xff0c;数据库使用mysql&#xff08;我的mysql版本5.5&#xff09;。网站点击能够跳转各个页面&#xff0c;不用部署服务器&#xff0c;本地运行即可。 题目&#xff1a;基于django的电子笔记交易系统 功…

并发编程的三大特性之有序性

有序性的概念 Java文件在被cpu执行前会进行编译成cpu可以执行的指令&#xff0c;为了提高cpu的执行效率会对其中的一些语句进行重排序。Java指令最终是乱序执行的目的是为了提高cpu的执行效率&#xff0c;发挥cpu的性能 单例模式由于指令重排可能会出现上述的问题&#xff0…

ASP.NET Core

1. 入口文件 一个应用程序总有一个入口文件&#xff0c;是应用启动代码开始执行的地方&#xff0c;这里往往也会涉及到应用的各种配置。当我们接触到一个新框架的时候&#xff0c;可以从入口文件入手&#xff0c;了解入口文件&#xff0c;能够帮助我们更好地理解应用的相关配置…

SOC与MCU的区别及汽车电子未来发展以及展望

SOC与MCU的区别及汽车电子未来发展以及展望 MCU与SOC的区别 CPU&#xff08;Central Processing Unit&#xff09;&#xff0c;是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可…

【PHP】问题已解决:宝塔面板搭建php网站无法上传图片或是文件(保姆级图文)

目录 问题情况原因和解决方法总结 『PHP』分享PHP环境配置到项目实战个人学习笔记。 欢迎关注 『PHP』 系列&#xff0c;持续更新中 欢迎关注 『PHP』 系列&#xff0c;持续更新中 问题情况 宝塔面板搭建php网站无法上传图片或是文件。 原因和解决方法 检查你的php里是否安装…

老板让你写个PPT没有头绪?没事,ChatGPT来帮你!

文章目录 前言一、先确定写什么——准备内容二、再看看能用吗——自动生成PPT三、最后再改改——看个人喜好写在最后 前言 自从人工智能横空而出&#xff0c;它在人们的生活中产生了巨大的影响。尤其在企业办公领域&#xff0c;借助人工智能的力量&#xff0c;能够迅速产出丰富…