返回介绍

5.1.3 发生了什么

发布于 2025-04-21 21:10:09 字数 1757 浏览 0 评论 0 收藏

你可能已经猜到了,Spring Boot CLI 在这里不仅仅是便捷地使用 Groovy 编写了 Spring 应用程序。Spring Boot CLI 施展了很多技能。

  • CLI 可以利用 Spring Boot 的自动配置和起步依赖。

  • CLI 可以检测到正在使用的特定类,自动解析合适的依赖库来支持那些类。

  • CLI 知道多数常用类都在哪些包里,如果用到了这些类,它会把那些包加入 Groovy 的默认包里。

  • 应用自动依赖解析和自动配置后,CLI 可以检测到当前运行的是一个 Web 应用程序,并自动引入嵌入式 Web 容器(默认是 Tomcat)供应用程序使用。

仔细想想,这些才是 CLI 提供的最重要的特性。Groovy 语法只是额外的福利!

通过 Spring Boot CLI 运行阅读列表应用程序,表面看似平凡无奇,实则大有乾坤。CLI 尝试用内嵌的 Groovy 编译器来编译 Groovy 代码。虽然你不知道,但实际上,未知类型(比如 JdbcTemplateControllerRequestMapping ,等等)最终会使代码编译失败。

但 CLI 不会放弃,它知道只要把 Spring Boot JDBC 起步依赖加入 Classpath 就能找到 JdbcTemplate 。它还知道把 Spring Boot 的 Web 起步依赖加入 Classpath 就能找到 Spring MVC 的相关类。因此,CLI 会从 Maven 仓库(默认为 Maven 中心仓库)里获取那些依赖。

如果此时 CLI 重新编译,那还是会失败,因为缺少 import 语句。但 CLI 知道很多常用类的包。利用定制 Groovy 编译器默认包导入的功能之后,CLI 把所有需要用到的包都加入了 Groovy 编译器的默认导入列表。

现在 CLI 可以尝试再一次编译了。假设没有其他 CLI 能力范围外的问题(比如,存在 CLI 不知道的语法或类型错误),代码就能完成编译。CLI 将通过内置的启动方法(与基于 Java 的例子里的 main() 方法类似)运行应用程序。

此时,Spring Boot 自动配置就能发挥作用了。它发现 Classpath 里存在 Spring MVC(因为 CLI 解析了 Web 起步依赖),就自动配置了合适的 Bean 来支持 Spring MVC,还有嵌入式 Tomcat Bean 供应用程序使用。它还发现 Classpath 里有 JdbcTemplate ,所以自动创建了 JdbcTemplate Bean,注入了同样自动创建的 DataSource Bean。

说起 DataSource Bean,这只是 Spring Boot 自动配置创建的众多 Bean 中的一个。Spring Boot 还自动配置了很多 Bean 来支持 Spring MVC 中的 Thymeleaf 模板。正是由于我们使用 @Grab 注解向 Classpath 里添加了 H2 和 Thymeleaf,这才触发了针对嵌入式 H2 数据库和 Thymeleaf 的自动配置。

@Grab 注解的作用是方便添加 CLI 无法自动解析的依赖。虽然它看上去很简单,但实际上这个小小的注解作用远比你想象得要大。让我们仔细看看这个注解,看看 Spring Boot CLI 是如何通过一个 Artifact 名称找到这么多常用依赖,看看整个依赖解析的过程是如何配置的。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。