Spring Boot 必须先说说 Spring 框架!

现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下。

Spring Boot 的背景
了解 Spring Boot 必须先说说 Spring 框架!

在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大。

用过 Spring 框架的都知道 Spring 能流行是因为它的两把利器:IOC 和 AOP,IOC 可以帮助我们管理对象的依赖关系,极大减少对象的耦合性,而 AOP 的切面编程功能可以更方面的使用动态代理来实现各种动态方法功能(如事务、缓存、日志等)。

而要集成 Spring 框架,必须要用到 XML 配置文件,或者注解式的 Java 代码配置。无论是使用 XML 或者代码配置方式,都需要对相关组件的配置有足够的了解,然后再编写大量冗长的配置代码。

然后又有多少开发人员能精通这些配置呢?如果我们只提供一些配置参数让框架能自动配置这些组件,那是不是 so easy?

基于简化 Spring 快速上手为目的,Spring Boot 框架诞生了!

什么是 Spring Boot?
Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置。

Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目。

Spring Boot不但能创建传统的 war 包应用,还能创建独立的不依赖于任何外部容器(如:tomcat)的独立应用,使用 java -jar 命令就能启动。同时,Spring Boot也提供了一个命令行工具来执行 Spring 的脚本。

Spring Boot 的官方网站:

https://projects.spring.io/spring-boot/

Spring Boot 的源码:

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

Spring Boot 的设计目标
如果你不清楚 Spring 是干嘛用的,那再来看看设计它的目标和初衷是什么!

为 Spring 应用开发提供一个更快、更容易上手的入门体验;

提供一系列在大型项目中经常用到的公共的非功能性特性,如:内嵌入服务器、安全、度量指标、健康检测、外部化配置;

零代码配置生成及零 XML 配置;

Spring Boot 为什么能这么火?
Spring Boot 为什么能这么火?是因为它有以下几个特色。

1、独立运行

Spring Boot内嵌了各种 Servlet 容器,Tomcat、Jetty等,现在不再需要打成 war 包部署到容器中,Spring Boot 只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个 jar 包内。

2、简化 Maven 配置

如上图所示,现在只要依赖 spring-boot-starter-web 启动器包,它包含所有 web 开发所有的依赖,就能拥有 Spring Web 的能力,极大简少了 maven 对依赖的配置。

使用 Maven 命令:mvn dependency:tree 也可以看到完整的依赖树:

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.1.RELEASE:compile

[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.0.1.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot:jar:2.0.1.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.1.RELEASE:compile

[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.1.RELEASE:compile

[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile

[INFO] | | | | \- ch.qos.logback:logback-core:jar:1.2.3:compile

[INFO] | | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile

[INFO] | | | | \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile

[INFO] | | | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile

[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile

[INFO] | | \- org.yaml:snakeyaml:jar:1.19:runtime

[INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.0.1.RELEASE:compile

[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.5:compile

[INFO] | | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile

[INFO] | | | \- com.fasterxml.www.444814.cn  jackson.core:jackson-core:jar:2.9.5:compile

[INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.5:compile

[INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.5:compile

[INFO] | | \- com.fasterxml.www.089188.cn/ jackson.module:jackson-module-parameter-names:jar:2.9.5:compile

[INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.1.RELEASE:compile

[INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.29:compile

[INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.29:compile

[INFO] | | \- org.apache.www.120xh.cn tomcat.embed:tomcat-embed-websocket:jar:8.5.29:compile

[INFO] | +- org.hibernate.validator:hibernate-validator:jar:6.0.9.Final:compile

[INFO] | | +- javax.validation:validation-api:jar:2.0.1.Final:compile

[INFO] | | +- org.jboss.www.xinghenyule.com logging:jboss-logging:jar:3.3.2.Final:compile

[INFO] | | \- com.fasterxml:classmate:jar:1.3.4:compile

[INFO] | +- org.springframework:spring-web:jar:5.0.5.RELEASE:compile

[INFO] | | \- org.springframework:spring-beans:jar:5.0.5.RELEASE:compile

[INFO] | \- org.springframework:spring-webmvc:jar:5.0.5.RELEASE:compile

[INFO] | +- org.springframework:spring-aop:jar:5.0.5.RELEASE:compile

[INFO] | +- org.springframework:spring-context:jar:5.0.5.RELEASE:compile

[INFO] | \- org.springframework:spring-expression:jar:5.0.5.RELEASE:compile

3、自动配置

Spring Boot能根据当前类路径下的类或者 jar 包里面来的类来自动配置 Spring Bean,如添加一个 spring-boot-starter-web 启动器就能拥有 web 的功能,无需其他配置。也可以在配置文件中添加相关配置来自定义装配,这个后面的课程会讲到,请关注后续内容。

4、无代码生成和XML配置

Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是 Spring 4+ 的核心功能之一。

5、应用监控

Spring Boot提供一系列端点可以监控服务及应用,能对Spring 应用做健康检测。

Spring Boot 的缺点
说了这么多 Spring Boot 的优点和特色,虽然上手很容易,但也不是没有缺点。任何框架都有其优缺点,Spring Boot 也不例外,我大概可以总结有以下几个缺点。

1、需要非常了解 Spring Boot 的核心技术原理,不然一旦遇到问题就很棘手。因为什么东西都集成了,自动配置化。这样,需要对配置信息非常熟悉,要找起问题来不是很容易。

2、从原始 Spring 项目很难平滑迁移至 Spring Boot 框架上来,因为有些历史老旧的 XML 配置无法通过 Java 来配置,还需要额外的 XML 文件就不是很完美。再比如,之前是独立的 Tomcat,什么参数都在线上配置好了,你改为内置的 Tomcat 就会遇到很多问题。

相对于优点来说,这些缺点也都不算什么。总之,Spring Boot 是值得我们任何一个 Java 开发者尝试摸索的。

原文地址:https://www.cnblogs.com/qwangxiao/p/9835741.html

时间: 2024-11-01 17:23:05

Spring Boot 必须先说说 Spring 框架!的相关文章

spring boot 2.0.3+spring cloud (Finchley)熔断器Hystrix

在分布式系统中服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于他们的其他服务出现远程调度的线程阻塞.某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果是整个服务的线程资源消耗殆尽.由于服务的依赖性,会导致依赖于该故障服务的其他服务也处于线程阻塞状态,最终导致这些服务的线程资源消耗殆尽,知道不可用,从而导致整个服务系统不可用,即雪崩效应.为了防止雪崩效应,产生了熔断器模型. Hystrix是Netflix公司开源的一个项目,提供了熔断器功能,能阻止

spring boot 2.0.3+spring cloud (Finchley)7、微服务监控Spring Cloud Admin

参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging 日志级别管理 JMX beans 管理 Threads 会话和线程管理 Trace 应用请求跟踪 应用运行参数信息,如: Java 系统属性 Java 环境变量属性 内存信息 Spring 环

Spring 5.x 、Spring Boot 2.x 、Spring Cloud 与常用技术栈整合

本项目仓库提供spring.spring-boot.spring-cloud 的常用整合用例.每个用例都提供详细的图文说明,并给出官方文档的具体链接作为参考.随着spring的迭代,本仓库会持续更新,升级版本和丰富用例. 仓库地址:https://github.com/heibaiying/spring-samples-for-all 版本说明: Spring: 5.1.3.RELEASE Spring-Boot:2.1.1.RELEASE Spring-Cloud:Finchley.SR2 目

Spring Boot默认的JSON解析框架设置

方案一:启动类继承WebMvcConfigurerAdapter,覆盖方法configureMessageConverters ... @SpringBootApplication public class UserApplication extends WebMvcConfigurerAdapter{ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters)

Spring Boot:整合Shiro权限框架

综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证.授权.加密.会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Spring Security 相比,Shiro使用了比较简单易懂易于使用的授权方式.Shiro属于轻量级框架,相对于Spring Security简单很多,并没有security那么复杂. 优势特点 它是一个功能强大.灵活的.优秀的.开源的安全框架. 它可以胜任身份验证.授权.企业会话管理和加密等工作. 它

微服务中基于Spring Boot的maven分布式项目框架的搭建

项目介绍 这里搭建的是基于 maven 的分布式工程,因为在一个项目中,多个微服务是属于同一个工程,只不过是提供不同的服务而已,再加上 IDEA 是默认一个窗口打开一个项目工程(这点和 eclipse 不同),如果项目大,不用 maven 聚合工程的话,那估计会打开十几个窗口--会崩溃--而且在架构上,也应该使用 maven 分布式工程来搭建微服务架构.这里手把手教大家在 IDEA 中搭建基于 maven 分布式的 Spring Cloud 微服务工程架构. maven分布式工程架构首先来看一下

Spring Boot示例 - 1. 使用Spring Boot Actuator构建RESTful web service

一.概述 Spring Boot Actuator是Spring Boot的子项目.使用它无需特别配置,即可为应用增加一些生产级别的服务.本教程展示使用Eclipse + Maven来从零开始构建一个RESTful的应用. 该应用作用是访问http://localhost:8080/fuck?name=xxx,会返回json字符串,并且访问http://localhost:8080/metrics 可以看到应用堆的一些信息. 什么是Spring Boot Actuator? Actuator是个

Spring Boot 动态数据源(Spring 注解数据源)

本文实现案例场景:某系统除了需要从自己的主要数据库上读取和管理数据外,还有一部分业务涉及到其他多个数据库,要求可以在任何方法上可以灵活指定具体要操作的数据库. 为了在开发中以最简单的方法使用,本文基于注解和AOP的方法实现,在spring boot框架的项目中,添加本文实现的代码类后,只需要配置好数据源就可以直接通过注解使用,简单方便. 一配置二使用1. 启动类注册动态数据源2. 配置文件中配置多个数据源3. 在需要的方法上使用注解指定数据源 1.在启动类添加 @Import({DynamicD

Spring Boot(一)—— Spring Boot 入门

1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 微服务:架构风格(服务微化) 一个应用应该是一组小型服务:可以通过HTTP的方式进行互通: 单体应用:ALL IN ONE 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元: 详细参照微服务文档 3.环境准备 环境约束 –jdk1.8:Spring Boot 推荐jdk1.7及以上:java version "1.8.0_102