对Spring-AI系列源码的讲解

前言

今天,我们将开启对Spring-AI系列源码的讲解。请大家不急不躁,我会逐步深入,每次专注于一个知识点,以防让人感到困惑。

首先,源码的讨论自然离不开自动装配。有人可能会问,之前已经讲解过这个内容了,为什么还要再谈一次?这是因为自Spring Boot 3.3.x版本以来,自动装配的机制发生了一些变化。尽管如此,凭借我们已具备的源码阅读能力,今天我们将简单回顾一下新版Spring如何处理自动装配的问题。毕竟,随着版本的不断升级,我们必须适应新的机制,避免仍用旧有的思维去解读源码。

版本依赖

要深入探索Spring-AI,首先需要配置多个关键依赖。以下是必不可少的核心依赖:

java 复制代码
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency> 
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>
      <version>1.0.0-M2</version>
</dependency>
<dependency> 
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-bom</artifactId>
      <version>1.0.0-M2</version>
      <type>pom</type>
      <scope>import</scope>
</dependency>

在完成引入之后,我们便能够顺畅地查看源码逻辑了。同时,请务必下载相关的文档资料,以便更好地理解和分析。

自动装配

之前我们已讨论过,SpringBoot的自动装配机制默认查找的是包内的META-INF/spring.factories文件。以下展示的是早期版本的装配源码,敬请留意。

java 复制代码
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
            getBeanClassLoader());
    Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
            + "are using a custom packaging, make sure that file is correct.");
    return configurations;
}

在此,loadFactoryNames 方法会去查找 META-INF/spring.factories 文件。然而,当我查找自动装配的源码时,费了很大劲却未能找到这个文件。

这显然存在问题,第一步就陷入了困境。因此,我重新回到原点,重新查找了自动装配的源码。这一次,我更换了检查的文件,以下是相关的源码:

java 复制代码
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
  List<String> configurations = ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader())
      .getCandidates();
  Assert.notEmpty(configurations,
          "No auto configuration classes found in "
                  + "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you "
                  + "are using a custom packaging, make sure that file is correct.");
      return configurations;
}

最终,我发现了问题的根源。原来这里更改为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。至此,自动装配机制中又新增了一个需要记住的文件名称。所幸,这个名称也并不难以记忆。接下来查看了一下,发现实际内容与之前的文件相似。

好的,装配的准备工作已经充分完成。接下来的章节将深入探讨更为细致的内容。

总结

在今天的讲解中,我们从Spring-AI的源码出发,逐步解构了自动装配的演变与实践。虽然自动装配的核心概念自以往并无太大改变,但Spring Boot 3.3.x版本带来的机制调整,确实值得我们重新审视。通过回顾新版的自动装配实现方式,我们不仅加深了对新机制的理解,也为后续的源码分析奠定了坚实的基础。

随着版本的迭代,保持对新技术的敏锐洞察,将是我们不断探索与进步的关键。希望大家能够跟随我们的步伐,深入领悟每一个知识点,最终在源代码的浩瀚宇宙中找到属于自己的那一片星辰。

相关推荐
It's now24 分钟前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈25 分钟前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn089527 分钟前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin40 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎1 小时前
翻之矩阵中的行
java·算法
火钳游侠1 小时前
java单行注释,多行注释,文档注释
java·开发语言
code bean2 小时前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存
selt7912 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
RestCloud2 小时前
智能制造的底层基建:iPaaS 如何统一 ERP、MES 与 WMS 的数据流
java·wms·erp·数据传输·ipaas·mes·集成平台