Spring AI 源码分析
创建一个最简 Spring AI 项目,只引入 spring-ai-starter-mcp-server-webmvc
依赖,版本为 1.0.1,spring.ai.mcp.server.type
配置为 SYNC
,然后定义一个 MCP 工具,准备工作就完成了
1 |
|
后续分析只关注与工具调用相关的源码。
创建一个最简 Spring AI 项目,只引入 spring-ai-starter-mcp-server-webmvc
依赖,版本为 1.0.1,spring.ai.mcp.server.type
配置为 SYNC
,然后定义一个 MCP 工具,准备工作就完成了
1 | @Service |
后续分析只关注与工具调用相关的源码。
在这篇文章中只介绍在 Windows 下使用 Docker 封印 EasyConnect 的操作步骤。我们会使用到 4 个软件:Docker Desktop、VNC Viewer、Clash for Windows、Wintun 和 1 个镜像:docker-easyconnect。
在 VirtualBox 上安装 Debian 系统还是比较简单的,让人感到有点困难的是 VirtualBox 的网络配置。以下是 Virtual Networking 关于网络模式的一个概览
比较省事儿的做法是使用桥接模式,这会在宿主机所在的网络加入一台电脑,在有的情况下这不是我们期望的,比如在公司网络中。我们的需求有两点,一是虚拟电脑能够访问外部网络,二是宿主机和虚拟电脑能够相互访问。从上面的网络模式概览中发现 NAT 和 Host-Only 模式的组合正好可以满足我们的需求。
在这篇文章中我们将从零开始在 Windows 上安装 VirtualBox,然后在 VirtualBox 上安装 Debian 系统。安装完成后会创建两个用户
用户 | 密码 | 备注 |
---|---|---|
root | 123456 | 超级用户,权限最大 |
acomma | 123456 | 普通用户,日常使用 |
下面让我们开始整个安装与配置过程。
看雪论坛 0xEEEE 在逆向调用QQ截图NT与WeChatOCR这篇文章中发布了调用新版 QQ 截图功能的软件 QQScreenShotNT-Plus,虽然已经设置了 QQScreenshot.exe 的路径,但是每次启动这个软件都要提示是否重新自动获取,在设置中去掉“启动提示”依然无效。在那篇文章中作者说 QQScreenShotNT-Plus 是在 QQImpl 基础上实现的,但是作者没有发布对应的源代码,因此我准备基于 Windows Forms 技术复刻相关的功能。因为是第一次使用 .NET 相关技术开发 Windows 系统的应用软件,所以会详细地记录整个开发过程。源代码在 QQScreenShotLauncher。
在 Canary Release 一文中作者说明了灰度发布的概念和流程
现在我们来看看在 Spring Cloud 技术体系下该如何实现灰度发布?相关的源码在 examples/example-cloud。
在 Java 语言中,当一个程序所有可能的语句都执行完成后程序就会自动退出。也可以调用 System#exit
和 Runtime#exit
方法提前退出当前程序。
1 | public class Application { |
但是对一个 Spring Boot 应用程序来说,当所有可能的语句执行完成后程序却不会自动退出,这是为什么呢?
1 | import org.springframework.boot.SpringApplication; |
在使用 Jackson 序列化对象时可以使用 @JsonPropertyOrder
注解、@JsonProperty
注解,MapperFeature
枚举中 SORT_PROPERTIES_ALPHABETICALLY
、SORT_CREATOR_PROPERTIES_FIRST
和 SORT_CREATOR_PROPERTIES_BY_DECLARATION_ORDER
枚举值来控制字段的输出顺序。如果没有通过这些方式控制字段的输出顺序,则输出的结果与对象中的字段的定义顺序有关。那么排序的过程是怎样的呢?下面来看一看。
本文是在 Windows 的 VirtualBox 上安装 Debian 11.4.0 系统。安装完成后会创建两个用户
用户 | 密码 | 备注 |
---|---|---|
root | 123456 | 超级用户,权限最大 |
acomma | 123456 | 普通用户,日常使用 |