持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
前言
Hi,各位小伙伴,我又来啦,而且是给大家带着一个大礼包来咯!从今天开始,壹哥 会带各位学习一个全新的Java开发利器---SpringBoot。有些小伙伴可能听说过SpringBoot,知道这是目前Java项目开发必备技能。可以说以后我们的Java项目,几乎都是在SpringBoot的环境中来完成的,其地位可以说等同于之前流行的SSH、SSM组合。而且现在Java中最先进的SpringCloud微服务技术,也必须依赖于SpringBoot环境哦!
因为SpringBoot也出现一段时间了,但是经历了SpringBoot1.x版本到2.x版本之间的切换,而且两个版本之间差异较大,所以本系列文章主要是基于SpringBoot2.x版本,讲解最新的SpringBoot用法和原理。如果你之前使用过SpringBoot1.x,现在也可以参考看看哦。
本系列教程依然会采用 壹哥 之前的讲解模式,会从入门教程开始,由浅入深,层层深入地讲解SpringBoot的使用及其底层原理,希望各位可以从本系列教程中有所收获!
其实我们今天要学习的SpringBoot,并不是一个凭空产生的全新技术,它其实是对之前既有技术的简化整合。所以我们在学习SpringBoot之前,壹哥 有必要跟各位讲述一下SpringBoot起源之前的史前文明---Spring,这样有利于我们加深理解SpringBoot。
所以,接下来我们先来看看Spring的故事!
一. Spring起源
1. 关于J2EE
要说到Spring的历史起源,首先咱们要说说J2EE这个玩意儿。相信很多学习Java的小伙伴都会觉得很熟悉,毕竟我们学习Java第一天,老师就给我们介绍J2EE了,知道这是Java中的企业版本!
J2EE在1999年和2000年的时候开始得到广泛实现,在J2EE中提出了”事务管理“等核心中间层标准化的概念,但是在实践中出现了各种问题,尤其是开发效率,开发难度和实际的性能都达不到预期。
2. 关于EJB这个框架
那时候开发J2EE基本都是使用EJB这个框架,当然现在EJB这玩意都是老古董了,早都被扔到粪堆里去了。但是当时没有那么多的框架,只能用这种老东西。
当时使用EJB开发J2EE应用的人,在开始的学习和使用EJB的时候,那真实一言难尽,苦不堪言,要学的东西太多了,而且也非常的难用。因为EJB要严格地实现各种不同类型的接口,项目中就会有大量重复的代码。然后项目中的配置文件也特别的复杂和单调。
正是因为EJB这个东西,又难学有难用,开发效率也不高,耗费的资源也多,你说这样的一个东西能有多少人用?所以当时就有很多的人盼着能不能出现一个更好用的框架来解决这些存在的问题。
3. Spring应运而生
后来,终于出来了一个新的框架,可以解决EJB存在的那些问题,而且使用起来简单的一匹!
这就是Spring!
正如这个框架的名称Spring一样应景,春天来了!
Spring是由Rod Johnson创建开源框架,它提供了一整套完善的开发环境,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务,大大简化了JavaEE的企业级应用开发。
Spring把使用接口的复杂度几乎降低到了零,更多地强调面向对象的设计原则,而且尽量减少不必要的异常捕捉。Spring不会和现有的解决方案去进行竞争,而是致力于将它们融合在一起。
总之可以这么说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
4. Spring框架构成
Spring一点点发展,从Spring1.x,到现在即将面世的Spring6.x,逐步形成了几大核心功能,这些核心功能主要由7个主要的模块组成,如下图所示:
接下来 壹哥 带各位简单了解一下Spring各个版本,我们简单来了解一下其发展历程。
二. Spring1.x 时代
先来个Spring1.x版本的jar包图片,如下:
1. 功能
1.x时代的Spring把所有的功能都集中在一个项目中,包含了核心的IoC、AOP,也包含了其他一些比如JDBC、Mail、ORM、事务、定时任务、Spring MVC等功能。
2. 优点
支持基于XML的配置;
支持依赖注入与声明式事务。
3. 缺点
只支持基于XML的配置,而且通过xml文件来配置bean,当项目不断扩大的时候,需要将xml配置信息分放到不同的配置文件中,因此需要频繁的在java类和xml配置文件中切换。
三. Spring2.x 时代
再来看看Spring2.x版本的jar包图片,如下:
1. 特点
*同时支持注解与xml。*应用程序的基本配置用xml,比如数据源、资源文件等;业务代码的开发用注解,比如Service中注入bean等。
2.优点
随着JDK1.5开始支持注解,Spring 2.x也增加了对注解的支持。因此可以使用注解对Bean进行声明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。
四. Spring3.x 时代
然后看看Spring3.x版本的jar包图片,如下:
1. 特点
从Spring3.x开始提供了基于Java类的配置方式,如@Configuration 和 @Bean的出现。
@Configuration 作用于类上,相当于一个xml配置文件;
@Bean 作用于方法上,相当于xml配置中的,至此注解慢慢的取代了xml配置。
2. 优点
使用Java类的配置方式可以更好的理解你配置的Bean,现在一般都推荐使用Java类的配置的方式。
五. Spring4.x 时代
1. 特点
到了Spring4.x时代,出现了比较多的新特性,如下:
Spring 4.x全面支持JDK8.0;
支持Lambda表达式;
支持@Scheduled和@PropertySource重复注解;
提供了空指针终结者Optional;
对核心容器进行增加;
支持泛型的依赖注入、Map的依赖注入、Lazy延迟依赖的注入、List注入、Condition条件注解注入、对CGLib动态代理类进行了增强;
支持了基于Groovy DSL的配置,提高Bean配置的灵活性。
Spring 4.x开始,Spring MVC基于Servlet 3.0 开发,并且为了方便Restful开发,引入了新的RestController注解器注解,同时还增加了一个AsyncRestTemplate支持Rest客户端的异步无阻塞请求。我们可以用下图来概括这些特性:
六. Spring 5.x 时代
最后看看Spring5.x版本的jar包:
在Spring5.x版本中,也是推出了很多新特性,如下图所示:
七. Spring生态概述
Spring发展到今天,旗下拥有诸多的子项目,从最基本的Spring IoC/AOP使用,到安全管理,再到大数据,Spring已经逐渐渗入到各个领域。
目前几乎所有JavaWeb相关的开发都可以在Spring中找到合适的方案,为了防止在开发的时候重复造轮子,下边梳理一下Spring的各个子项目,做到心中有数。
结语
至此,壹哥 就带各位简单梳理了一些Spring的发展历程,对这个经典的框架有了一些基本的了解,这样接下来对我们学习SpringBoot会有一定的帮助。
最后留个小问题:
你觉得Spring和SpringBoot是什么关系呢?评论区留言说说你的看法吧!