Java Spring Boot 是一种工具,它能让开发者使用 Java Spring Framework 更快速、更轻松地开发 Web 应用程序和微服务。
Spring Framework 是一个广受欢迎的开源企业级框架,用于创建独立的、可用于生产的、运行在 Java 虚拟机(JVM)上的应用程序。Spring Boot 通过以下三个核心特性简化并加速了基于 Spring Framework 的开发过程:
- 自动配置(Autoconfiguration)
- 约定优于配置的开发理念(An opinionated approach to configuration)
- 支持创建独立运行的应用程序(The ability to create stand-alone applications)
这些特性协同工作,提供了一种只需极少配置和设置即可搭建 Spring 应用的工具。此外,Spring Boot 应用还可以通过 Open Liberty 运行时进行优化和运行。
为什么 Spring Framework 如此流行?
Spring Framework 提供了依赖注入(Dependency Injection)功能,允许对象自行声明其依赖项,随后由 Spring 容器将这些依赖注入到对象中。这一特性使开发者能够构建由松耦合组件组成的模块化应用,非常适合微服务架构和分布式网络应用。
此外,Spring Framework 内置支持应用程序通常需要执行的各种常见任务,例如:
- 数据绑定(Data binding)
- 类型转换(Type conversion)
- 验证(Validation)
- 异常处理(Exception handling)
- 资源与事件管理(Resource and event management)
- 国际化(Internationalization)
它还能与多种 Java EE 技术集成,如 RMI(远程方法调用)、AMQP(高级消息队列协议)、Java Web Services 等。
近年来,Spring Framework 已采用 Jakarta 命名空间,以兼容众多新的和更新后的 Jakarta EE 规范。
总而言之,Spring Framework 为开发者提供了构建松耦合、跨平台 Java EE 应用所需的所有工具和功能,可在任意环境中运行。
Spring Boot 为 Spring Framework 增加了什么?
尽管 Spring Framework 功能强大且全面,但配置、搭建和部署 Spring 应用仍需耗费大量时间和专业知识。Spring Boot 通过以下三大能力显著降低了这一门槛:
自动配置(Autoconfiguration)
自动配置功能会根据预设的依赖项初始化应用程序,无需手动配置。Spring Boot 内置的自动配置机制会根据你的设置,自动配置底层的 Spring Framework 和第三方库。这种基于最佳实践的方法有助于避免错误。
虽然你可以在初始化完成后覆盖默认配置,但初始设置已大幅加快开发速度,并减少了人为出错的可能性。
约定优于配置的理念(Opinionated Approach)
Spring Boot 采用“约定优于配置”的方式,根据项目需求智能选择要安装的包和默认值,而不是要求开发者手动做出所有决策并逐一配置。
在初始化过程中,你可以通过选择多个“启动器依赖”(称为 Spring Starters)来定义项目需求。这些 Starter 覆盖了典型使用场景。你只需填写一个简单的 Web 表单(即 Spring Boot Initializr),无需编写任何代码。
例如:
- Spring Web Starter 可简化基于 Spring 的 Web 应用开发,自动添加所有必要依赖(如 Apache Tomcat Web 服务器)。
- Spring Security Starter 则自动为应用添加身份验证和访问控制功能。
Spring Boot 提供了超过 50 个官方 Starter,还有大量第三方 Starter 可用。
独立运行的应用程序(Stand-alone Applications)
Spring Boot 帮助开发者创建“开箱即用”的应用程序。具体来说,你可以创建不依赖外部 Web 服务器的独立应用。
在初始化过程中,你可以将 Web 服务器(如 Tomcat 或 Netty)内嵌到应用中。这样一来,只需执行 run 命令,即可在任何平台上启动应用。(当然,你也可以选择不使用内嵌服务器。)
Spring Boot 与 Spring Framework 对比
再次强调,相较于单独使用 Spring Framework,Spring Boot 最大的优势在于易用性和更快的开发速度。
理论上,这种便利性是以牺牲直接使用 Spring Framework 所带来的更高灵活性为代价的。但在实践中,除非你需要实现非常特殊的配置,否则使用 Spring Boot 的权衡是值得的。
你仍然可以使用 Spring Framework 广受欢迎的注解系统,轻松将未被 Starter 覆盖的额外依赖注入到应用中。同时,你依然能使用 Spring Framework 的所有功能,包括:
- 简便的事件处理
- 验证与数据绑定
- 类型转换
- 内置的安全性和测试能力
总结:只要你的项目范围能被至少一个 Spring Starter 覆盖,Spring Boot 就能显著简化开发流程。