深度解读:Spring.3版本自动装配机制的演变与实践

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

前言

今天,我们将开启对Spring-AI系列源码的讲解。请大家不急不躁,我会渐渐深入,每次专注于一个知识点,以防让人感到困惑。
起首,源码的讨论自然离不开自动装配。有人可能会问,之前已经讲解过这个内容了,为什么还要再谈一次?这是因为自Spring Boot 3.3.x版本以来,自动装配的机制发生了一些变革。尽管如此,凭借我们已具备的源码阅读能力,今天我们将简单回首一下新版Spring怎样处置惩罚自动装配的问题。毕竟,随着版本的不停升级,我们必须适应新的机制,避免仍用旧有的思维去解读源码。
版本依靠

要深入探索Spring-AI,起首需要设置多个关键依靠。以下是必不可少的焦点依靠:
  1. <parent>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-parent</artifactId>
  4.         <version>3.3.1</version>
  5.         <relativePath/>
  6. </parent>
  7. <dependency>
  8.       <groupId>org.springframework.ai</groupId>
  9.       <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>
  10.       <version>1.0.0-M2</version>
  11. </dependency>
  12. <dependency>
  13.       <groupId>org.springframework.ai</groupId>
  14.       <artifactId>spring-ai-bom</artifactId>
  15.       <version>1.0.0-M2</version>
  16.       <type>pom</type>
  17.       <scope>import</scope>
  18. </dependency>
复制代码
在完成引入之后,我们便能够顺畅地检察源码逻辑了。同时,请务必下载相关的文档资料,以便更好地理解和分析。
自动装配

之前我们已讨论过,SpringBoot的自动装配机制默认查找的是包内的META-INF/spring.factories文件。以下展示的是早期版本的装配源码,敬请注意。
  1. protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
  2.     List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
  3.             getBeanClassLoader());
  4.     Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
  5.             + "are using a custom packaging, make sure that file is correct.");
  6.     return configurations;
  7. }
复制代码
在此,loadFactoryNames 方法会去查找 META-INF/spring.factories 文件。然而,当我查找自动装配的源码时,费了很大劲却未能找到这个文件。

这显然存在问题,第一步就陷入了困境。因此,我重新回到原点,重新查找了自动装配的源码。这一次,我更换了查抄的文件,以下是相关的源码:
  1. protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
  2.   List<String> configurations = ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader())
  3.       .getCandidates();
  4.   Assert.notEmpty(configurations,
  5.           "No auto configuration classes found in "
  6.                   + "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you "
  7.                   + "are using a custom packaging, make sure that file is correct.");
  8.       return configurations;
  9. }
复制代码
最终,我发现了问题的根源。原来这里更改为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。至此,自动装配机制中又新增了一个需要记住的文件名称。所幸,这个名称也并不难以影象。接下来检察了一下,发现实际内容与之前的文件相似。

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

在今天的讲解中,我们从Spring-AI的源码出发,渐渐解构了自动装配的演变与实践。固然自动装配的焦点概念自以往并无太大改变,但Spring Boot 3.3.x版本带来的机制调整,确实值得我们重新审视。通过回首新版的自动装配实现方式,我们不仅加深了对新机制的理解,也为后续的源码分析奠定了坚固的底子。
随着版本的迭代,保持对新技术的敏锐洞察,将是我们不停探索与进步的关键。盼望大家能够跟随我们的步伐,深入领悟每一个知识点,最终在源代码的浩瀚宇宙中找到属于自己的那一片星辰。
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表