Spring Boot到底是解决什么问题的?

Spring Boot到底是解决什么问题的

前言

最近准备系统的学习下 Spring Cloud ,因此会发现 Spring Boot 是其必备的一个基础,使用 Spring Boot 也是有好几年的经验了,从当初入行时的 Struts2/Spring MVC + Spring + Hibernate/MyBatis 开发,到使用 Spring Boot2,再到现在的 Spring Cloud / Spring Cloud Alibaba ,确实是有一种趋势在推动着你,自然而然的切换着技术框架。

自己一直也想梳理一下技术体系,正好从 Spring Boot 开始, 借着最近总结的一个学习思路开始技术的梳理。

学习思路:

  • 先搞清楚有什么用?
    • 这项技术的作用是什么、解决什么问题、为什么会出现、它的目的是什么、在什么场景下以及给谁用的?理解它的定位是什么?
  • 再搞清楚是什么?
  • 后面再…

具体学习方式:

  • 带着问题,去到最源头的地方,最权威的的地方去寻找答案,去官方网站、官方文档、github开源仓库查找资料;
  • 从书本中去寻找,购买该技术评价较好的书籍,从它的前言、章节的标题、子章节的标题、章节概述、章节小结中去寻找答案。

本篇关注的是第一个问题:Spring Boot 有什么用?

Spring Boot 官方材料

首先我们从官方材料开始入手。

概述

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.

Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可以“直接运行”。

开发人员希望把自己的精力更多地用在写业务逻辑上,写完业务逻辑就让应用跑起来,而不是还要大量的繁琐配置。

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

以前使用Spring Framework,并配合 Hibernate 或 MyBatis 等第三方框架,都需要先做各种配置,也就是有一个搭建开发环境的过程。这个过程就是"fuss"。

在Spring Boot提供了一种 Opinionated 观点,来对待Spring 和第三方库,让上面的搭建过程最小化。绝大多数Spring Boot应用都只需要极简的配置就可以。

这里核心的概念是 Opinionated ,有态度有观点,固执的。其含义就是,在搭建应用的过程中,Spring Boot认为你就应该这样做,你最好这样做才和我的思路一致,才能让你减少更多的配置。

这其实也是“convention over configuration”这个词组的含义。“约定优于配置”。convention 就是约定、默认、公约的意思。大家都遵守默认约定好的规则,比什么都要配置一番更方便省事。

特征

Features

  • Create stand-alone Spring applications

You can use Spring Boot to create stand-alone Java applications that can be started using java -jar or more traditional WAR deployments. We also provide a command-line tool that runs Spring scripts.

创建独立的 Spring 应用程序

  • 独立的含义是能够独立分发、独立部署、独立运行。因为最终编译后的结果、第三方Jar和容器都打包成一个可执行的jar,使用 java -jar 就可以运行了。
  • 以前的传统方式是编译成一个WAR包,然后放到Tomcat等容器里,通过启动容器才能运行。
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)

  • Provide opinionated ‘starter’ dependencies to simplify your build configuration

提供 opinionated 的 ‘starter’ 依赖项以简化您的构建配置

  • 提供很多 starter 依赖,提供很多常用组件的默认配置,简化你的配置。例如,开发Web应用,就用spring-boot-starter-web,数据持久化就用spring-boot-starter-data-xxx。
  • Automatically configure Spring and 3rd party libraries whenever possible

尽可能自动配置 Spring 和 第三方库

  • Provide production-ready features such as metrics, health checks, and externalized configuration

提供 production-ready(生产就绪)功能,例如指标、健康检查和外部化配置

  • 何为 production-ready ,指应用在编码完成后,能否直接上到生产上去?还需要做哪些工作才可以发布到生产,即生产就绪。

1.何谓生产就绪

  • Absolutely no code generation and no requirement for XML configuration

完全无需代码生成,无需 XML 配置

目标

Our primary goals are:

  • Provide a radically faster and widely accessible getting started experience for all Spring development.

为所有 Spring 开发提供更快且可广泛访问的入门体验。

  • Be opinionated, but get out of the way quickly as requirements start to diverge from the defaults.

Opinionated,有态度有观点,固执的

out of the box 即为开箱即用。

get out of the way, 就是解决,避开的意思

requirements start to diverge from the defaults, 各种各样的需求变更。

做到开箱即用,快速解决后期需求变更带来的问题。

  • Provide a range of non-functional features common to large classes of projects (for example, embedded servers, security, metrics, health checks, externalized configuration).

提供一系列大型项目通用的非功能特性(例如嵌入式服务器、安全性、指标、健康检查和外部化配置)。

  • Absolutely no code generation and no requirement for XML configuration.

绝对不需要代码生成,也不需要 XML 配置。

小结

  • 使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。

  • Spring Boot提供了一种 Opinionated 观点,来对待 Spring 和第三方库,简化您的构建配置。提供很多starter依赖,提供很多常用组件的默认配置,简化你的配置。

  • 可以使用 java -jar 命令来运行或者基于传统的 war 包部署的应用程序。

  • 提供 production-ready 功能,例如指标、健康检查和外部化配置。

快速构建 Spring Boot 应用

使用 Spring Boot 工程脚手架 快速构建 Spring Boot 应用。

Quickstart Your Project Bootstrap your application with Spring Initializr.

Spring Initializr: https://start.spring.io/

阿里云: https://start.aliyun.com/bootstrap.html

Spring & Spring Boot

通过学习官方文档,对于 Spring Boot 能做什么基本上有一个整体的认识。同时也会发现 Spring Boot 的基础是 Spring 。

Spring

在 Spring 出现之前,如果要进行 Java Web 开发,则非常复杂,例如,若需要将记录插入数据库,则必须编写大量的代码来打开、操作和关闭数据库。而使用 Spring JDBC 模块的 JDBCTemplate,只需要进行数据库操作即可,打开和关闭交由 Spring 管理。

Spring :为解决企业应用程序开发的复杂性而创建的框架。

提供了依赖注入和“开箱即用”的一些模块,如:Spring MVC、Spring JDBC、Spring AOP、Spring IoC、Spring ORM、Spring Test、Spring Security。这些模块大大地缩短了应用程序的开发时间,提高了开发应用程序的效率。

但使用 Spring 开发应用显得烦琐,因为它使用了大量的XML配置文件,配置烦琐,整合不易,开发和部署效率低下。

这时急切需要一种新的能解决这些问题的开发框架,于是 Pivotal Software 公司在 2013 年开始了 Spring Boot 的研发。

2012 年 10 月,Mike Youngstrom 在 Spring JIRA 中创建了一个功能请求 , 要求在 Spring 框架中支持无容器 Web 应用程序体系结构。他谈到了在主容器引导 Spring 容器内配置 Web 容器服务。这是 JIRA 请求的摘录:

  • 我认为 Spring 的 Web 应用体系结构可以大大简化,如果它提供了从上到下利用 Spring 组件和配置模型的工具和参考体系结构。在简单的 main()方法引导的 Spring 容器内嵌入和统一这些常用Web 容器服务的配置。
  • 这一要求促使了Pivotal Software 公司在 2013 年初开始研发 Spring Boot 项目。

Spring Boot

Spring Boot 的设计初衷是解决 Spring 各版本配置工作过于繁重的问题,简化初始搭建流程、降低开发难度,使开发人员只需要专注应用程序的功能和业务逻辑实现,而不用在配置上花费太多时间。

Spring Boot 使用“默认大于配置”的理念,提供了很多已经集成好的方案,以便程序员在开发应用程序时能做到零配置或极简配置。同时,为了不失灵活性,它也支持自定义操作。

Spring Boot 内置了50多种 starter,以便快速配置和使用。比如,要使用 Email 服务,只需要添加"spring-boot-starter-mail"依赖,然后直接调用 JavaMailSender 接口发送邮件。

Spring Boot 可以看作是 Spring 框架的扩展和自动化,它消除了在 Spring 中需要进行的 XML(Extensible Markup Language) 文件配置,使得开发变得更快、更高效、更自动化

Spring Boot 帮我们省去了烦琐的配置工作,开发人员只需要专注业务逻辑开发即可

用一句话来说明:Spring Boot 是 Spring 框架的扩展和自动化。

总结

最后我们再总结一下,本篇的核心思路是:带着问题去 Spring Boot 官方材料及相关技术书籍中寻找答案,理清楚 Spring Boot 的作用是什么、为什么会出现、它的目的是什么、在什么场景下以及给谁用的?

为什么会出现?

  • 使用 Spring 开发应用显得烦琐,因为它使用了大量的XML配置文件,配置烦琐,整合不易,开发和部署效率低下。
  • 这时急切需要一种新的能解决这些问题的开发框架。

在什么场景下以及给谁用的?

  • 创建由 Spring 提供支持的生产级应用程序和服务。
  • 为所有 Spring 开发提供更快且可广泛访问的入门体验。
  • 即 Spring 开发的场景下开发人员使用。

有什么用?

  • 方便创建生产级应用;使用 Spring Boot 可以帮助您轻松创建由 Spring 提供支持的生产级应用程序和服务。
  • 方便启动;使用 Spring Boot 创建的程序可以使用 java -jar 或更传统的 WAR 部署启动的独立 Java 应用程序。直接嵌入了 Tomcat、Jetty 或 Undertow等。
  • 极简配置;Spring Boot 提供了一种 Opinionated 观点(约定优于配置),来对待Spring 和第三方库,以便新用户和现有用户可以快速获得他们需要的内容。提供很多 starter 依赖,简化您的配置,方便快速的集成第三方库。绝大多数Spring Boot应用都只需要极简的配置就可以。
  • 提供生产就绪功能;提供 production-ready (生产就绪)功能,例如指标、健康检查和外部化配置等。
  • Spring Boot 可以看作是 Spring 框架的扩展和自动化,它消除了在 Spring 中需要进行的 XML(Extensible Markup Language) 文件配置,使得开发变得更快、更高效、更自动化

它的目的是什么?

  • Spring Boot 的设计初衷是解决 Spring 各版本配置工作过于繁重的问题,简化初始搭建流程、降低开发难度,使开发人员只需要专注应用程序的功能和业务逻辑实现,而不用在配置上花费太多时间。
  • Spring Boot 帮我们省去了烦琐的配置工作,开发人员只需要专注业务逻辑开发即可.

公众号

知行chen

参考

官方网站: https://spring.io/projects/spring-boot

GitHub: https://github.com/spring-projects/spring-boot

Spring Boot Reference Documentation: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/

跟着官方文档学Spring Boot (0) Overview https://zhuanlan.zhihu.com/p/55173112

《Spring Boot 实战派》 龙中华

Spring Boot与Kubernetes云原生微服务实践 杨波 ,何谓生产就绪

Spring Boot Reference Documentation 中文: https://geekdoc.top/docs/languages/java/spring/spring-boot/2.5.5/reference/html/index.html

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot解决跨域问题有多种方式,以下是其中的两种: 1. 使用 @CrossOrigin 注解 在 Spring Boot 的 Controller 层中,可以使用 @CrossOrigin 注解来解决跨域问题。例如: ``` @RestController public class MyController { @CrossOrigin @GetMapping("/hello") public String hello() { return "Hello, world!"; } } ``` 使用 @CrossOrigin 注解可以实现简单的跨域请求,但是如果需要更细粒度的控制,就需要使用其他的方式。 2. 自定义 CorsFilter Spring Boot 中可以自定义 CorsFilter 来处理跨域请求。CorsFilter 是一个过滤器,可以在请求处理之前拦截请求,并进行相应的处理。例如: ``` @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowedOrigins(Arrays.asList("*")); // 允许所有域名 config.setAllowedMethods(Arrays.asList("*")); // 允许所有 HTTP 方法 config.setAllowedHeaders(Arrays.asList("*")); // 允许所有请求头 config.setMaxAge(1800L); // 预检请求的有效期,单位为秒 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } } ``` 上面的代码中,我们通过 CorsConfiguration 来配置允许的域名、HTTP 方法、请求头和预检请求的有效期等信息。然后将这个配置注册到 UrlBasedCorsConfigurationSource 中,并返回一个 CorsFilter 对象,这样就可以处理跨域请求了。 以上两种方式都可以用来解决跨域问题,具体使用哪种方式可以根据实际情况来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值