重新认识Spring

重新认识Spring

Spring框架是Java平台上的一种开源应用框架,尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于诞生了一种面向Spring编程的思潮,可能从来没有人意识到它的到来。打开电脑中的Java工程,你会发现几乎每个类中都充斥着Spring的痕迹,我们仿佛已经离不开Spring了。

为什么说面向Spring编程呢?在你的IDE创建一个Java工程,开始依赖Spring boot之后,你可能就开始称它为Spring boot工程了,这让Maven情何以堪?可能有人会问,不叫Spring工程,叫Maven工程就对了吗?问题的关键是Maven提供了项目构建、依赖管理和项目信息管理,所以叫Maven工程没有毛病,在创建工程时,我们选择的不是Maven project吗?Spring深入了代码的每一行,让很多开发人员已经忘却了自己是在用Java做面向对象开发,而不是Spring。

Spring的几宗“罪”:
1、它让工程启动变得越来越慢。
不知道是否有人注意到,自己的工程从创建开始,到交付之前,工程的启动会从10S开始,慢到几分钟,甚至10分钟以上。我经历过一个项目,在个人PC上要十五分钟才能启动,这已经严重的影响了开发的效率。简单算一笔账,假设一个开发人员一天要修改十个Bug,一次测试通过(这个效率是无数开发人员的追求),这样的情况下,启动一次需要10分钟,也就是10*10=100分钟,这就是1小时四十分钟,对于一个开发人员来说,这近两个小时都是无用功,开发的效率还怎么追求呢?
即使这样,也没有人埋怨过Spring,甚至有人都不知道这是Spring之罪,因为Spring要求你的应用代码绝大部分要受管,它要全部单例化,统计一下你的工程里,到底有多少个类是受管的,它们都需要在启动时实例化到Sprinng的容器之中,这就是工程启动慢的原因。

为什么要让Spring来管理对象实例化,是否需要让所有的类都受管于Srping呢?难道new Class成了Java的原罪吗?

2、它让设计模式(除了单例模式外)很难实现。
我们都知道受管于Spring的类,都是以单例形式存在的,这样的前提下,想去应用其它的设计模式,就变得很困难,Spring这时就成了一套枷锁。即使这样,还是能变通的使用其它设计模式,但我们为什么要先带上枷锁再去做事呢? 是单纯的因为Spring好吗?

3、它让对象模型与关系模型很难解耦。
Spring也未解决对象与关系的矛盾,反之,似乎还让对象与关系之间的矛盾越来越大。JPA确实简化了数据访问层的实现,但是它也创造了很多自己的副产物,比如实体类,它与数据表对应,实体类与数据表的耦合,更容易产生连锁反应。Repository类,它的存在让开发人员可以根据需要来随意地扩展它,同时,也让数据检索与数据持久化变得泛滥起来,数据层访问的代码越来越臃肿。它们的存在是否还与Spring创建它们的初衷一致?这也只能仁者见仁,智者见智了。

4、注解的泛滥。
注解的泛滥大大增加了开发人员的学习成本,且让程序的可读性变得越来越差。这里不是在否定注解的作用,只是在阐述Spring的注解过多,已经大大超过了的合理开发与使用的范畴。

如何面对Spring,上述的观点似乎让很多人不适应,我不是在说Spring有多不好,而是它太好,已经让我们失去了抵抗的能力,只能去依赖。这就像一对父母太溺爱自己的孩子,什么都提前给他准备好,不让他受若受累,不让他受一丁点的委屈,这样的做法真的正确吗?宠坏的孩子缺乏适应能力,没有创造能力,那么,我们应该如何做,才能避免自己成为这样被宠坏的孩子呢?

1、正确认识Spring。虽然它的定位是应用框架,但它并不是应用不可或缺的依赖,如果能以工具视之,会让你的视界更开阔。说工具,可能有点太小看了Spring的强大,对于开发人员来说,说它是工具箱、百宝囊也不为过。快速创建项目、事务控制、数据层连接控制、声明式服务、AOP等等这些功能,就是我们随手可得的工具,但也只是工具而已,既然是工具,就具有可选性,合则用,反之则换,这才是我们对待Sping的正确态度。

2、回归Java,它才是开发人员的源动力,回归面向对象,才是开发人员使用Java最称手武器。设计与开发人员要意识到,创建的是Java工程,而不是Spring工程,Spring在project中也只是一个dependency而已,使用Java做面向对象设计与实现才是正途,至于Spring提供的工具、组件、功能,还是那句话,合则用,反之则弃。(我们使用Java到底是不是在做面向对象设计与开发,请阅读我的另一篇文章不一样的面向对象设计

3、正确看待“框架”,不只是Spring,其它框架也一样,它们只是给了应用开发一个前提,并不是所有。一个刚建好的楼房只是毛坯而已,它就像是一个框架,至于楼房里的每个房间要如何装修,框架是不负责的,虽然在建造之时,也提供了精装与简装方案,但也是提供可选,并不是必选,购买者会按照自己的意愿自己装修,或者选择已提供好的精装、简装方案。Spring就是建好的大楼,而开发人员要按照不同的需求把对应的房间变成雇主想要的样子,开发人员不必非得使用Spring提供的“工具”,采用合适的“工具”完成房间的装修才是开发人员应该做的。

注:上面提到了Spring受管Bean泛滥的情况,导致应用启动太慢的问题,开发人员可以采用懒加载的方式来控制,可以在@Service @Componet @RestController的同时,加上@Lazy,当然有些Bean是不能懒加载的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值