Spring 的前世今生

10 篇文章 0 订阅
6 篇文章 0 订阅

这是最好的时代,但也最怪,主角和配菜哪个是你最爱(三押)。

前言

经过一系列的纠结、挣扎后, 安酱还是选择了Spring 作为下一个要分享的主题。这里很有必要要解释一下为什么会选择Spring,首先第一个理由就是现在用 Java 开发的项目基本离不开Spring。除了某些大厂会自研一些适合于自己内部业务的框架,不过我相信就算是自研框架那也会用到Spring的某一个模块。这也导致了在后续的面试中几乎是必问的(不会还真有公司不问Spring吧),所以看完我这个系列关于Spring的文章基本可以颠覆好哥哥们对Spring 的认知。

其次的话,目前我们的代码存在了太多太多的黑盒操作。就 Java 这门语言而言,就已经存在了像对内存管理、基本数据结构等等的黑盒。现在又来了一个Spring,就对于开发效率和使用度来说这是很好的一件事,但是也是很可怕的一件事。因为黑盒太多,程序开发越来越简单,攻城狮也会越变的越来越傻。如果坚持走技术这条路的好哥哥们,很有必要把这些黑盒打开,看看黑盒里面的风景。好哥哥们不要着急,一个一个来。

然后的话Spring 这个框架的设计的太优秀了,里面有太多思路、方法供我们学习。当然很重要的一个原因就是Spring 的很多设计思路与 Java 面向对象有很多相似的地方,理解起来不会那么复杂。后续会将所有的文章同步到安安酱这个微信公众号下面,关注即可领取Spring 源码相关的独家资料,好哥哥们赶快行动吧。

赶快

概述

这里要从一个梗说起,Java 是世界上最好的语言(原梗说的是 PHP,这个梗出自 PHP 的官方文档!)。Java 从 94 年诞生之日起,借助于当时它的 语法简单面向对象跨平台安全健壮等特性迅速得到业内欢迎,很快攀升到使用率No1的位置。Java 有一个爱好,就是喜欢制定规范标准,但是又不去实现它。然后就出现了一些服务提供商使用它的规范标准来制造应用服务器,基于 Java 实现的各种应用、各种服务、各种框架和第三方工具包开始出现爆炸性增长。这其中就包含了一个叫做EJB的框架。

EJB

EJB(Enterprise Java Bean)是JavaEE(企业级应用开发,只是提供了一些规范和标准,并不是一个现成的产品)中面向服务的体系架构的解决方案,可以将功能封装在服务器端,以服务的形式对外发布,客户端在无需知道方法细节的情况下来远程调用方法,大大降低了模块间的耦合性,提高了系统的安全性和可维护性。

要想知道为什么要使用EJB,就需要知道面向服务的概念。面向服务是软件开发过程中,异构环境下模块调用的一个比较重要的思想。同样,面向服务也只是一种设计思想,不是一种编程技术。这也是业界后来提出的SOA(Service Oriented Architecture, 面向服务的体系结构)的概念。有一个前几年很流行的框架SOA框架,那就是WebService。这个框架前几年也是面试必问的,后来因为微服务的出现,WebService也就没落了。关于这个的话好哥哥们可以搜一下架构的演变过程就能理解了。

这里用一个简单的案例理解一下"面向服务"的概念。场景就是在某些大型应用场合,我们要在不同的运行环境之间传递数据。比如说 A 公司需要获取 B 公司的某些数据,这要如何实现?有好哥哥们会说了,这不是很简单吗,写一个接口呀。要知道在那个时代是没有像Servlet这种概念的,更没有像我们现在通过Restful风格的接口进行远程调用。那咋办呢?

直联
第一种如上图,直连 B 公司的数据库。这是一种最简单的方式,但也是基本行不通的方式。一方面 A 公司需要了解 B 公司的详细结构,另一方面对于 B 公司来说是不安全的。
soa
第二种如上图,B 公司编写自己的程序,访问数据库,对外发布一个接口,并发布一个服务的名称。我们知道,接口里面并没有核心代码。该接口也被 A 公司获取,A 公司通过寻找相应的 B 公司发布的服务名称,然后通过 Java 中的RMI(远程方法调用)调用 B 公司程序里面的方法。而EJB的底层,就是用RMI实现的。当然这里的前提是 A、B 项目都是使用 Java。

EJB 的没落

由于IBMSunEJB提倡者力推其前景,起初一些大公司纷纷采用EJB部署他们的系统。然而随后各种问题便接踵而至,对EJB的恶评短时间内激增。对于初学者,EJBAPI显得太过困难;对于许多程序员来说,书写那些必须抛出特定异常的接口并将bean类作为抽象类实现的做法既不直观也不正常。当然,EJB所被赋予的使命,如对象关系映射和事务管理确实有其天然复杂性,但其API之复杂还是令开发人员们觉得望而却步,一些人开始怀疑EJB除了引入了复杂的实现手段以外似乎并未带来什么实际好处。

另外,实际运用中被发现,如果使用EJB来封装业务逻辑会带来性能上的下降。这是因为,最早的EJB规范只允许客户端通过特定协议(如 CORBA)进行远程方法调用来调用,即使大部分实际应用根本就不需要分布式计算。直到EJB 2.0才引入了本地接口,以支持可以开发不通过网络就能直接本地调用的EJB系统。

尽管如此,EJB的广泛普及仍然为其复杂度所制约。尽管已经有一些高质量的集成开发工具可以协助开发人员通过自动编码解决一部分重复作业,但这并不能降低学习此项技术的难度。另一方面,草根阶层的编程爱好者们发起了一场旨在使用轻量级技术以代替复杂的EJB的运动。这些技术包括Hibernate(用于提供数据持久化和对象-关系映射)及Spring框架(用于封装业务逻辑)。尽管它们不像EJB那样有巨头支持,但其在庶民间却更加流行,并且也被一些对EJB深感失望的企业所采用。

春天来了

关于Spring的发展起源要回溯到 2002 年,当时正是Java EEEJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。

于是乎,为了证明自己的想法,于 2001 年 10 月写了一本名为Expert One-On-One J2EE Development Without EJB的书(巨佬就是狠,一言不合就写书),介绍了当时 Java 企业应用程序开发的情况,并指出了 Java EEEJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。在书中,他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为 com.interface21,所以人们最初称这套开源框架为interface21,这就是 Spring 的前身。

作者简介

上面有提到Spring的作者是一个美国的小伙子,在那时还真的是小伙子,他就是大民鼎鼎的Rod Johnson(如下图)。这位好哥哥就很牛叉,出生于澳大利亚,毕业于悉尼大学计算机系。到这还是平平无奇,但是他还有另一个身份,音乐学的博士。因为自己爱好音乐,便攻读了音乐学的博士。果然编程的极致是艺术,而艺术相通的。但是现在 Rod Johnson 已经离开了 Spring(2012 年 Rod Johnson 宣布他将要离开 Spring Source ),成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。这就是巨佬吧!
Rod

Spring 是什么

Spring 是众多 Java 开源项目中的一个。破除权威迷信,以一己之力撼动了Java EE传统重量级框架坚如磐石的大厦。同时Spring 是分层的Java EE应用一站式的轻量级开源框架,以IOC(Inverse of Control,控制反转) 和 AOP(Aspect Oriented Programming,切面编程)为内核,提供了展示层Spring MVC、持久层Spring JDBC以及业务层事务管理等一站式的企业应用技术。

另外的话,Spring 包含整合了开源项目中众多著名的第三方框架和类库。比如像MybatisRedis等等。Spring在最初的目标中,并不是致力于打造又一个大而全的新框架。而是希望Spring框架就像一个大容器一样,能够快速方便地集成各种应用(不仅仅是Web应用,就算一个普通的 Java 应用也可以)中各种现有技术,对它们进行支持,让开发人员在实现过程中感觉就像使用简单JavaBean一样,在必要的时候还能轻松完成同类框架和工具的替换。目前来看,整个Spring就是一个大容器,包容万象。而达到这一目标的两大手段就是上面提到的IOCAOP,同时也是我们学习Spring的一个起点。

当然,就光用这一点篇幅是讲不清Spring的。在这里所说的只是Spring的冰山一角,就目前而言,Spring已经打造完成了属于自己的生态帝国,引用官网的一句话来说就是Spring is everywhere

轻量级

针对于轻量级有很多说法,比如程序代码的类很少、发行包的大小很小。然而,在Spring中的轻量级指的是最少的代码侵入(Spring源码中的类就光Spring core就已经几千个了)。侵入性就是当你的代码引入了一个组件,导致其它代码或者设计要做相应的更改以适应新组件时,这样的情况我们就认为这个新组件具有侵入性。比如像使用Struts的时候,我们需要继承一些Struts的类,这时Struts就已经侵入到了我的业务代码里面了。而使用Spring编写一些业务逻辑时并不需要继承Spring特定的类,通过配置完成依赖注入后就可以使用。支撑这一特性的就是IOC(不得不学的一个点)。

Spring 发展

这里还是要引用官网的一句话来说就是Spring is everywhere。下图列举了Spring相关的一些子项目,仅仅是一部分而已。
spring feture

最后关注安安酱,一个热衷于分享干货的公众号。现在关注领取即可Sping源码分析相关资料。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值