一篇文章带你搞懂spring全家桶套餐

  spring全家桶里都有哪些食物

  上期我们讲了spring和springmvc两个框架的基础知识和学习路线,而这期内容,我们将围绕着spring全家桶展开来讨论。

  大家应该都知道,按照出现的顺序,spring全家桶大概包含了spring、springmvc、springboot以及springcloud,从开胃小菜spring到满汉全席springcloud,spring全家桶可谓Java工程师的必备大餐,那么,我们不妨先来看看,spring全家桶是如何从光杆司令spring发展到如今的庞大家族的。

  目前,Spring生态中包含22个主要活跃的项目。

  image

  你会发现,这些项目几乎涵盖了日常开发所有的场景,只不过你不一定会用到而已,除了spring和springmvc,springcloud和springboot之外,还有很多开源的spring生态项目持续在spring社区维护,比如springdata,用于解决spring中的统一数据方案,spring integration,顾名思义,适用于集成外部服务。

  还有我们在一些项目中可能用到的spring security,通常用来解决一些安全问题,这个框架在业界用的也比较多。

  除此之外,spring AMQP以及spring Kafka则是在spring框架中集成了对应的消息中间件,让消息收发在框架中更容易地被使用。

  在整个Spring生态中包含了许多应用在特定场景的具体框架,如:“Spring Framework”,“Spring Security”,“Spring Boot”,“Spring Cloud”等等,其中“Spring Framework”框架是整个生态的核心基础,其他框架都需要依赖“Spring Framework”提供的基础功能,而且每个框架都有自己独立的代码仓库。

  面向spring编程的Java工程师

  想起我第一次上手做Java项目的时候,就是在网上寻找教程,那个时候就已经看到了很多spring框架应用的项目,基本上网上入门的项目都是基于的SpringMVC,可能是ssm或者ssh。

  总之,教程里会叫你写一个controller,返回简单的“hello world”,复杂点的,可能要接入数据库,使用一下mybatis,当然了,很多时候网上都能找到源码,你只要下载下来run一遍就好了,当然,前提是你已经安装好了JDK,并你会使用maven和ide,否则下载下来了你可能run不起来,各种报错。虽然这些问题对于老司机来说是不存在的,但是相信我,这对于小白来说是经常遇到的问题。

  我最早写博客的时候,就是在上手做一个简单的ssm项目,当时笨手笨脚地配置好了各种东西,好不容易把整个工程跑了起来,于是高兴地记录起了实战过程,后来时间一久,再回去看当初的那几篇博客,觉得自己真是菜的抠脚。

  但是这都是新手程序员需要经历的,你需要想搞懂Java基础,再去搞懂Java Web,要完全了解了Java Web,你就必须要会spring,会了spring之后,请把它相关的组件也都搞懂,特别是那些你在工作中可能要用到的。

  image

  如今我在阿里做Java,每天用的技术都是自研的中间件,这些中间件技术其实很多也是吸取了开源技术的精髓,你可以经常在它们的源代码中看到spring的影子,这就是spring生态系统强大的影响力,即使是国内一流的Java技术团队,都会花大量时间去研究和学习spring框架源码。

  做Java开发的人一提起Spring,首先在脑海中浮现出的就是“IoC”,“AOP”,“Spring MVC”,“Spring Security”等等这些名词,甚至大有“无Spring不Java”的感慨。

  实际上,时至今日Spring已不再是一个简单的编程框架了,从最初的“SSH框架”发展到今天,Struts和Hibernate都几乎快要从程序员视野中消失了,而Spring却发展成了一个非常庞大且完整的生态。

  所以说,除非特别指明是Spring生态中的某个具体框架,否则提起“Spring”应该指的是整个Spring生态。

  说句不夸张的话,Java程序员只要精通了Spring,也就掌握了Java开发的精髓。

  Spring Framework

  上一期内容中我们已经介绍了spring和springmvc,这里为了内容的完整性,请允许我再赘述一遍。

  Spring Framework项目是整个Spring生态的基础,包含了Spring最核心的功能,如:IoC,AOP,Spring MVC等,其他项目都需要依赖Spring Framework。

  另外,还需要注意的是Spring Framework项目又包含多个子模块,如:spring-core,spring-beans,spring-context,spring-aop,spring-web,spring-webmvc等等。

  实际上,Spring Framework项目是一个模块化的架构,各模块之间又存在依赖关系。我们在Java Web后台项目中使用得最多的Spring MVC实际上就是模块spring-webmvc,它与其他模块的依赖关系如下所示:

  image

  显然,spring-webmvc模块依赖spring-context,spring-aop和spring-web。

  spring-webmvc模块的依赖关系

  image

  springboot

  我第一次是接触springboot的时候,还是在某度实习的时候,当时我们做的是私有云,使用的正是开源项目OpenStack,OpenStack本身包含很多组件,有的负责网络,有的负责存储,有的负责调度等等,所有它的整体部署方式就是分布式的,因此做微服务拆分也是很正常的。

  当然,那个时候我对微服务还没有什么概念,对springboot也只有一面之缘,只知道当时我师傅告诉我说,springboot是用来作微服务的,让我看看某个springboot项目的代码,于是我一愣一愣地就去看了,结果发现,这个东西和spring好像长得也没啥区别啊,除了启动方式奇怪了点,xml配置文件少了点,好像也没啥太大的不同。

  实际上,也确实如此,Spring Boot是一个开发基于Spring的脚手架项目,它简化了很多spring的和springmvc的特性,让新手更加容易地上手spring开发。

  比如,它默认集成了嵌入式Tomcat,配置注解化,支持快速集成第三方开发组件(如MyBatis),大大降低了使用Spring的门槛,而且内置了许多可以直接用于生产环境的功能。

  简单来看,springboot就是在springmvc外又包了一层,屏蔽了springmvc一些复杂的实现细节,以及繁琐的配置及开发流程,转而把一些约定俗成的东西做成规范,形成了所谓的springboot starter。

  image

  这种支持快速开发、快速继承的框架,显然是非常提升开发效率的,所以,它是目前用于开发微服务架构项目的不二选择。

  不过这里要强调一点,springboot并不等同于微服务,它充其量只是一个应用容器而已,如果把微服务比作一张大网,那么springboot应用只是这张网中的一个个小点,而微服务还需要通过服务网关、负载均衡、注册中心等手段把这些点连接起来,并且在这张网的运行中支持服务的降级和熔断(切断到某个点的连接

  值得注意的是:许多人刚接触Spring Boot的人把它神话了,固然使用Spring Boot能快速开发一个健壮的、可直接运行的项目,但是它的核心和基础来源于Spring Framework。

  对于重度依赖Spring的开发人员,应该先去吃透Spring Framework,只要真正掌握了Spring Framework中各个模块的实现原理,对于在实际开发中使用Spring Boot遇到的问题也就迎刃而解了。

  先来说说,什么是微服务?

  不瞒您说,我到现在都没有真正意义上地接触过springcloud,原因很简单,我开发工作用的技术栈已经被阿里内部的中间件承包了,所有你在springcloud里用到的技术,在阿里内部都有对应的一套甚至是几套实现,它们有的已经开源了,有的只在内部使用,反正,在阿里你是用不到开源的技术的,即使强如springcloud的也是一样。

  其实除了阿里,类似美团、京东等Java大厂,一样也会维护自己的一套自研技术栈,毕竟自己的东西自己说了算,出现问题也能第一时间修复,如果用的是开源技术,万一哪天出了bug,还得到开源社区求爷爷告奶奶,岂不是很尴尬。

  虽然没有严格意义上地接触过springcloud,但是微服务这一套东西其实是换汤不换药的。

  让我们来看看百度百科对于微服务和springcloud的介绍吧。

  所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。微服务设计原则:1、各司其职2、服务高可用和可扩展性。

  微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

  其实这里已经说得比较明白了,微服务的作用是把以往庞大的单个应用拆分成多个组件,每个组件各司其职,比起单个大型服务,微服务的好处实在太多了,比如它们可以单独部署,单独测试,更好地支持DevOps,更有效利用机器资源,同时更容易保证扩展性和可用性。下图就是微服务架构的变迁过程。

  image

  如果还是没理解,那我就一点一点地给你解释。

  1、在部署和研发效率方面,一个大型应用,部署本身就很慢,改动一点代码就要部署半天,研发迭代效率可想而知,而微服务应用本身体量就小,部署快,每个微服务可以独立开发迭代,效率自然高。

  2、在使用资源和测试效率方面,一个大型应用,往往占用的资源上下限差距很大,很多时候我们不得不给他分配大量的资源,而微服务应用如今都支持容器化部署,容器化部署的最大好处就是支持资源的弹性伸缩,提高资源利用效率。而对于测试来说,一个大型应用,往往一点点改动就需要回归这个应用的代码,代价可想而知,而微服务拆分后,测试的量将大大降低。

  除此之外,微服务的优点还很多,比如更容易排查问题,更容易进行扩容和伸缩,更能够避免单点的问题。

  下面这张图,把我们日常的生活比作微服务,其实,我们的生活不就是由这么一个个齿轮组成的么。

  image

  当然,微服务也不全都是优点,缺点自然也是有的。

  比如,微服务的拆分需要花很大代价,首先应用要拆分,原来的本地服务要变成分布式服务,而分布式服务要面临的问题比本地服务的多得多,不过幸好微服务框架已经解决了其中一些问题。

  另外,微服务的拆分不仅是应用的拆分,相应的数据源也要进行拆分,这就涉及到了分布式数据库的一些解决方案,比如分库分表,比如分布式事务等等,也就是说,微服务的拆分必然引入很多分布式环境下才有的问题,包括数据一致性、网络分区等等。

  image

  springcloud:最佳的微服务开源方案

  那么,既然微服务拆分会带来这么多问题,那么微服务框架的研发者自然也想到了,于是它们会用各种办法来帮助开发者解决这些问题,下面就让我们来看看springcloud是怎么做的吧。

  Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring

  Boot的开发风格做到一键启动和部署。

  Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

  image

  显然,springcloud是有备而来的,微服务拆分引起的问题,它都可以一一化解。

  比如,把本地服务拆分成分布式服务,springcloud提供了服务注册中心和配置中心,以及统一的服务网关,让分布式服务像本地服务一样简单易用

  与此同时,消息总线、负载均衡等技术解决了分布式环境中的一些高并发问题。

  除此之外,像是数据监控、熔断和限流、分布式链路追踪、集群容错等功能,都在springcloud中有对应的解决方案。

  再次强调一下,springcloud才是微服务框架,而springboot只是一个快速开发web应用的脚手架,Spring Cloud的基础是Spring Boot,基于Spring Boot可以大大简化开发各微服务组件的流程。

  至此,我们已经介绍完了spring全家桶的大部分内容,希望这些内容对于你日后学习spring生态技术有所帮助。

  推荐资源

  其实,spring最好的技术资源就在官方:https://spring.io/

  英文好的同学不妨直接去看官方文档。

  书籍

  Spring Boot实战,丁雪丰(译者)

  Spring源码深度解析

  视频

  这里我整理了一些还算不错的视频资源分享给大家,具体请在公众号【程序员黄小斜】内回复“spring”即可查看

  博客

  Java技术仓库《Java程序员复习指南》

  https://github.com/h2pl/Java-Tutorial

  整合全网优质Java学习内容,帮助你从基础到进阶系统化复习Java

  面试指南

  全网最热的Java面试指南,共200多页,非常实用,不管是用于复习还是准备面试都是不错的。

  在公众号【Java技术江湖】回复“PDF”即可免费领取。

  写在最后

  如果觉得本文对你有帮助的话,请你也不要吝啬你的“好看”哈,转发朋友圈就是对我最大的支持啦,你们的支持是对我最大的鼓励。

原文地址:https://www.cnblogs.com/jiuq521/p/12702778.html

时间: 2024-10-22 11:42:19

一篇文章带你搞懂spring全家桶套餐的相关文章

一篇文章带你搞懂DEX文件的结构

DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了.下面,开练! 建议:不要只看,跟着我做.看再多遍不如自己亲自实践一遍来的可靠,别问我为什么知道.泪崩ing..... 首先,我们需要自己构造一个dex文件,因为自己构造的比较简单,分析起来比较容易.等你简单的会了,难的自然也就懂了. 0x00■  构造DEX文件 首先,我们编写一个简单的Java程序,如下: public class HelloWorld { int a = 0; static

一篇文章带你搞懂JS对象的自我销毁

在日常的JS组件开发中,往往会有一些较为复杂的DOM操作及事件监听,尤其是在处理UI层面的widgets时候更为明显.常常会花很多精力在对象的init上,而当组件需要被移除时则仅仅是把所在DOM草草的remove掉就算完事儿. 当然,绝大多数情况这样处理并没有什么不妥,因为事件监听时仅仅局限于所属的DOM自身,移除DOM后,只要对象的外部引用不再维系,相关的内存占用很快就会被当作垃圾回收掉(本文不讨论低版本 IE 内存回收的 BUG). 其实个人在构建组件(对象)的时候是比较习惯于添加自定义方法

一篇文章带你看懂Cloudflare信息泄露事件

版权声明:本文由贺嘉  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁 https://www.qcloud.com/community 1.问题描述 近期根据Hacker News的报道,以及国际CDN厂商cloudflare的公告,我们注意到了一起敏感信息.API 密钥被Cloudflare泄露给了随机的 requesters请求,同时相关敏感数据也被搜索引擎给收录

一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora

本文由云+社区发表 | 本文作者: 刘峰,腾讯云NewSQL数据库产品负责人.曾职于联想研究院,Teradata北京研发中心,从事数据库相关工作8年.2017年加入腾讯数据库产品中心,担任NewSQL数据库产品负责人. 云数据库与传统数据库的战争已打响,一个字概括就是"抢". 如火如茶的 AWS re:Invent 2018大会闭幕了,相信云养鹅的产品经理们又准时打开油管,Recap一年一度的科技盛宴. 据说今年一共发布了140多项产品服务,但是,Amazon Aurora 数据库 仍

精辟:一篇文章带你看懂数据储存!

前言:日益火热的云服务 小米组织架构调整上了热搜,如同阿里巴巴.华为和腾讯一样,小米组织架构调整中也将云平台单独成为一个部门.自2018年以来,各大企业调整组织架构的动作中,其实可以窥见大企业对云平台的重视程度,云服务在很多方面悄悄的改变了人们的生活,不过由于消费端接触不多,大家对云服务内容认识较少. 数据储存是云服务中较为重要的板块,早期百度.腾讯.微博.金山等企业都推出自己的免费云盘,供给用户使用,这也是我们最早接触云储存,随着云计算技术的成熟,云服务更偏重于为企业提供服务,基于云计算,搭建

一篇文章带你了解spring框架

虽然现在流行用SpringBoot了,很多配置已经简化和封装了,但是对于Spring的一些基础我们了解一些是对我们自己的架构思想很有帮助的!接下来和笔者一起来探讨一下Spring框架吧! 1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发.Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安

Spring全家桶——SpringBoot之AOP详解

Spring全家桶--SpringBoot之AOP详解 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面. 准备工作 首先,使用AOP要在build.gradle中加入依赖 //引入AOP依赖 compile "org.springframework.boot:spring-boot-starter-aop:${springBootVersion}" 然后在application.yml中

Spring全家桶带来云时代的软件开发变革

快速发展和变化的业务需求所带来的挑战正在驱动现代企业数字化转型,云原生应用系统的构建是其中最为重要环节之一. 目前,云原生应用开发框架Spring(包括Spring MVC.Spring Boot.Spring Cloud.Spring Cloud Dataflow)已经占据Java软件开发框架的统治地位.在Snyk最新的2018 JVM生态调查中表明:40%被调研的开发者正在使用Spring Boot,36%被调研的开发者正在使用Spring MVC:2018年也是Spring Boot首次超

【转】Spring全家桶

Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案. 很多研发人员把spring看作心目中最好的java项目,没有之一. 所以这是重点也是难点,工作中必须会,面试时肯定考. 那么,今天花费20分钟,梳理Spring框架相关知识. Spring系列包含非常多的项目,可以满足java开发中的方方面面. 先来看常用框架的知识点汇总,如图: Ⅰ