美文网首页
由Spring框架所想到的

由Spring框架所想到的

作者: 只不过33 | 来源:发表于2020-05-21 20:08 被阅读0次

各种水平有限 不喜勿喷 后续有机会还会继续完善

Spring框架,spring的意思是春天的意思。为什么叫spring不得而知。可能是使用这个框架的时候会有在春天里感受到的那种愉悦吧。

大家都知道,java是一种面向对象的编程语言。何为对象?首先这个对象不是专门指一个人的那个对象。这个对象是针对于类来说的。那么什么是类呢?类就是鱼类鸟类的类。那么某一只鱼就是属于鱼类的一个对象。或者说是鱼类的一个实例。

所以这里其实有两个概念,一个类,一个是实例。不管是什么概念,在程序中需要得到表示。关键是计算机无法直接执行人类语言啊。如果计算机可以按照人说的话办事。那么估计广大的程序员们就要失业了。所以计算机是无法直接按照人说的话办事的。一般来说计算机要想真正做到按照人说的话办事,在一般公司里通常要经过以下步骤。首先需要老板发话,老板对技术经理说,我想做个什么什么东西,它大概可以怎么怎么样就行。其实意思就是说我想让计算机办什么什么事。技术经理接受到了老板的任务。于是技术经理把老板的笼统的命令更加详细化了一下,大概是把几句话翻译成了几十句话的样子。接着技术经理叫来了,产品主管,前端主管,后台主管,如此这般交代一下。接着三位主管各领了十几句话回去了。紧接着各位主管加班加点各把十几句话翻译成了几百句话。并且还制作相应的规划,大纲等文件。于是各位主管把翻译后的几百句话分给了手下的几个一线的开发者。一线的开发者没人都接到了上百句话。于是一线的开发者也开始加班加点。各自通过自己的方法把这上百句话,有的翻译成了上千句话。有的没有翻译直接开干。通过各种手法将接受到的上百句话翻译成了java语言。

所以有时候让计算机间接地按照自己说的几句话去做,并不是简单的事情。这里面至少涉及到了很多的细节。的确有时候让人抓狂。

那么自然界里有太多的鱼了,尤其是大海里的那种小黄鱼,那可真叫一个多。如果我在计算机里用java写一个鱼类。那么这个鱼类是个很简单的类。但是如果这个类也要生成大海里的的小黄鱼那么多的鱼对象,那么计算机应该很快就会无法工作的,通常来说这样不会使计算机坏掉。但是至少计算机很可能会临时瘫痪掉,从而影响到计算机正在进行的工作。

计算机工作的时候是离不开内存的,而对象是占内存的,对象多了占的内存也就多了。如果对象太多内存都装不下了。这时候不是程序自己瘫痪掉,就是整个计算机都瘫痪掉了。

当然如果要具体来说的话,一般对象都存在一个叫做堆的内存区域中。而类一般则存在叫做方法区的内存区域中。堆的内存好说,那么方法区这个内存区域不是应该放方法的吗?不得而知。其实方法是放在栈帧中的。而栈帧则是放在线程栈中的。而线程栈是放在栈中的。

上面说到的堆和栈,又叫虚拟机堆,虚拟机栈。那么有没有“系统堆”和“系统栈”呢。“系统堆”是没有的,而“系统栈的确是有的”,不过它就称为“栈”而不是系统“栈”。  栈和虚拟机栈倒是有几分相似。它也有栈帧。只不过它的栈帧里的内容不是java代码,而是c或者c++代码。因为它的栈帧里放的本地方法。

Java在运行的时候,其实是一个一个的线程在运行。这些线程需要不断地被cpu执行。执行一下歇一会之后再执行。不断地这样子进行着。所以cpu执行一个线程的时候,需要知道上一次这个线程被执行到什么地方了。像这个线程上一次被执行到什么地方这种数据都是存在一个叫做程序计数器的内存区域。

所以既然内存是有限的,那么堆也是有限的,那么如果堆中的一个对象已经没有作用了,就需要回收了。而通过走一个流程就可以完成回收了。

如果一个类只能生成一个对象,那么这种模式叫做单例模式。写单例模式还是稍微费点劲的。如果很多类都需要是单例模式,则写起来可能有点麻烦。但是如果使用spring框架的话,那么只需要修改spring配置的一个参数就可以让很多类都变成单例模式了。从某种意义上来说spring做的工作是自动生成代码。如果说自动生成代码有点难以理解,那么想一想自动洗衣机。自动洗衣机是机器自己就能洗衣服的。而spring自己就能产生代码的。

其实也主要是把很多类写成单例模式这种事情,其实差不多就是把很多衣服洗干净这件事。这样子重复而单调的事情可以由机器来做,而这样子重复又单调的代码可以由程序来生成。

而java文件,其实可以看做是砖坯,而class文件可以看做是红砖。其实上述的自动生成代码的过程中砖坯肯定是没有增加的。那么是红砖增加了吗?从理论上来说这是有可能的。

不过和红砖在实际中被嵌入到墙壁中它的作用就到此为止不同,类在内存中更像是现实中的模具。而诞生于模具下的一个个的产品就是对象了。

那么是不是模具增加了呢?从理论上来说也是存在的。

其实红砖没有增加,模具没有增加,产品也没有增加。只不过是产品另一个产品被替代了而已。而另一个产品相对于原来的产品就是增加的。

总而言之,言而总之,spring就是通过上述方式达到了自动生成代码的目的。

那么spring就这样欢快地干活了,spring干活的同时,spring管理的那些对象也在紧张而有序地忙碌着。

一般来说事情都会交给一线的员工——对象来完成。为什么要这样呢?为什么还要分为类和对象,还总是要让对象多干活呢,那不是说众生平等,越平等越好吗?等等,众生平等那说的是生命平等。而虚拟机里的一切都没有生命,所以无所谓平等不平等。这样子做的原因在于,客观世界就有这么一个规律,就分为类和实例。这个规律是人类几万年总结下来的宝贵成果。直接把客观世界的这个规律用到编程世界中它不香吗?难道还要再花巨大的精力的时间再去研究一个新的规律才是好的?那时候黄花菜都凉了。在编程的世界里,最重要的就是数据和算法,或者说是参数与方法。那么计算机最生猛的地方之一,就是它不仅仅能存数据它还可以存算法。所以从某种意义上来说算法其实也是一种数据。至少在计算机的世界中是这样。那么如何存储这些“数据”就成了一个问题。如果简单按照顺序去存储这些“数据”那是面向过程编程。按照顺序去存储,这个思路比较简单,如果没有特定顺序,那就随便地一个一个地排就行了。这样子也的确是可以的,人们也这么做了很久。那么为什么后来有的人偏要用其他做法去做呢?难道就是想突出自己的个性吗?其实不是的。因为一个一个地排这种思路虽然简单。但是数据和算法有时候是很多的。而且有时候算法和算法之间非常相似只不过使用的一个参数不同而已。处理这样子繁杂的局面还是十分费神的。然后有人就发现其实很多方法和参数是可以照着一个统一的模子被计算机自动生成的。而人只需要关注模子就可以了,而不用去操心具体干活的那些数据和算法了。这样子管理这些具体干活的数据和算法其实更方便了。如果人更多的去关心模具,无疑会更加有创造力。如果说上帝创造了鸟类,鱼类等这些类。那么在计算机世界中,一个程序员可以作为那个世界的上帝。或者说程序员立规则,计算机像重启这个现实的世界一样重启自己的世界。

而且实际好处是有的,除了思路可以简单,对象的方法其实比类方法还要灵活一些。因为对象的方法其实是计算机自己生成的。而不用程序员亲自去写了。

而这个系统其实也是支持像熵那样单向性的,如果设计得当。那么在需要改变程序的时候是不需要修改任何文件只进行添加文件的动作也是可以的。这样子本来是两件事情,增加和修改文件,最后能变成一件事情就是增加文件。从而让事情简单。

相关文章

网友评论

      本文标题:由Spring框架所想到的

      本文链接:https://www.haomeiwen.com/subject/olotahtx.html