Spring揭秘-Spring框架的由来

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/qq_36000403/article/details/83153427
出自【zzf__的博客】

前言:

非常喜欢这句话, 知其表而不知其里,充其量你只能算一个画匠,而不是画师;相信你来到这里,就是和我一样,想要一探究竟Spring框架为什么如此强大,又为什么它的出现会受到如此多人的喜爱,它到底解决了什么问题等等。这是我的第一篇文章,也是讲解Spring框架的第一篇文章,废话少说,从现在开始,我将和大家一起揭开Spring的面纱,同时也欢迎大家能够指出我的不足,喜欢我的文章的朋友帮忙点击关注并转发,让更多人能够共同学习,谢谢!!!

背景(这里只作简单介绍,对那个时代并不了解):

在Spring还没问世的时代,那个时候Java EE 系统框架臃肿、低效、脱离现实,这时Rod Johnson看不下去了,在2002年编著的《Expert one on one J2EE design and development》一书中,同年在他又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。

Spring是于2003年兴起的一个轻量级Java开发框架,它就是由《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来的。

传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务、事务处理等。

Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

Spring框架的本质:

Spring框架自发布到现在不管它经过多少次版本更迭,其本质是始终不变的,都是为了提供各种服务, 被设计出来的目的就是为了简化JavaEE的企业级应用开发。

但Spring又是如何简化java开发的呢?
可以总结以下四点(对第一点作详细讲解,其它在以后文章会涉及到):

  1. 基于POJO的轻量级和最小侵入性编程

    • 很多框架通过强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,早期的EJB是一个很容易想到的例子,不过这种侵入式的编程方式在早期版本的Struts
      WebWork Tapestry以及无数其他的Java规范和框架中都能看到
    • Spring则竭力避免因自身的API而弄乱你的代码。它不会强迫你实现Spring规范的接口或继承Spring规范的类,相反,在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring。最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO。Spring的非侵入式编程模型意味着这个类在Spring应用和非Spring应用中都可以发挥同样的作用
  2. 通过依赖注入和面向接口实现松耦合

  3. 基于切面和惯例进行声明式编程

    • 允许你把遍布应用各处的功能分离出来形成可重用的组件
  4. 通过切面和模板减少样式代码

    • 过多的因为使用JavaAPI而导致的样板式代码,一个常见范例是使用JDBC访问数据库查询数据,可以通过切面和模板减少样式代码

接下来我们看下图:

在这里插入图片描述

从上图中可以看出,整个Spring框架构建在Core核心模块之上,它是整个框架的基础。在该模块中,Spring为我们提供了一个IoC容器实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系,也可以说是管理着Spring应用中bean的创建 配置和管理。

就像一棵树必须依赖强大的根基才能生长繁盛一样,Spring框架内的各个模块也是如此,理论上来说,上层的模块需要依赖下层的模块才能正常,这就是为什么说这些模块是 相互依赖的,比如Spring的事务管理抽象层就是直接构建在Spring AOP的基础之上。不过,近乎处于同一水平线的各个模块之间却可以认为是 相互独立的,彼此之间没什么瓜葛。从这个角度看,这些模块之间的相互独立一说也是成立的。

所有的Spring家族成员全部构建于Spring框架基础之上。在我们想要往Spring这棵参天大树更高的地方攀爬之前。实实在在地先去了解Spring框架这一根基。

ok~,本篇到此结束,上述内容基于参考资料和个人的理解,如有误处,请留言谢谢。

猜你喜欢

转载自blog.csdn.net/qq_36000403/article/details/83153427