自己从学习编程开始到现在有一个习惯:一直喜欢把软件开发中的技术和思路放到实际生活中去类比考虑。自己平常也喜欢开一些关于软件哲学的书籍,事实证明这些书籍对自己的学习新技术很有很大的帮助。数学是一切学科的基础,也是一切学科的顶峰,如果有那个学科能超越这个顶峰,我认为是哲学。高中时候一直喜欢看奇幻类的小说,所有小说中的主人公最后都是要领悟"道"的,而这个"道"就是 “哲学”。只有领悟道 自己的 道 后才能创造出自己强大的武技。哲学 讲究的是 道 ,道 是 路  也就是方向的意思。我们只有确定方向了,才能有所成就。

  “大道至简”一直是我信奉的一句话:大道理(指基本原理、方法和规律)是极其简单的,简单到一两句话就能说明白,一门技术一门学问,弄得很深奥是因为没有看穿实质,搞的很复杂是因为没有抓住程序的关键。所谓 高人指点一语道破天机,不用太多言语;武术高手在搏击时总是一招制敌,击中要害,绝对不会大战300回合才击倒对手。

  被誉为"软件世界的爱迪生",发明了 BSD,TCP/IP, csh, vi 和NFS的 SUN 首席科学家 Bill Joy 说过:在计算机系结构领域中,缓存 是唯一能称得上伟大的思想,其他的一切发明和技术不过是在不同场景下运用这一思想而已。 其实这句话 我觉得 可以运用任何一个领域。里面的 缓存 可以理解为 中间件,代理或者映射。比如 计算机只能识别 0 1,显然这样是无法编程的,于是有了 发明了 “指令集” 把 汇编语言 翻译成 0 1, 这里我们可以把指令集 当做 缓存。汇编语言也很难,于是发明了 高级语言,而计算机无法识别高级语言,于是有了 编译器,编译器 把高级语言翻译成机器可以识别的机器码,这里 编译器 就是 缓存。Java 因为有了JVM 能够模拟机器,所示使它能够快平台。这里的JVM也是一个缓存。其实 缓存的思想 在现实中也是如此,你做不了的事情,你可以通过别人帮你做,此时别人就成了缓存。有时候面对复杂的框架的时候,我们第一直觉就可以把它当做一个缓存,因为这些框架做的事我们都可以做,只是我们现在把我们原本应该做的事让框架帮我们做了,我们试着去想这个框架可以代替我做那些事,我用这个框架可以节省我那些操作,去用它而不是一开始就去研究它。

  设计软件犹如设计人生,在我学习Oracle体系结构的时候,让我觉得 Oracle的体系结构 就是一套很好的管理体系,它里面的管理哲学很多都可以在显示生活中借鉴的。一个管理体系无非就是 自上而下 层层递增也就是所谓的 树状结构。

  其实面向对象的思想,并不是只属于 面向对象语言,在面向过程的理由也用到这种思想,里面的构件,结构 都可以理解为 对象,其实我们在考虑 任何事物的时候都是把它当做对象(事物)来考虑,所以面向对象的思想不是 OOP语言的 专属。

  面向对象 思想里 "万物皆对象" Spring里面 "万物皆Bean"。

  Spring遵循的一个宗旨:一切皆为Bean 你可以把 Spring 比作一个 "超级工厂" 里面任何Bean 都可以生产。当然里面的IOC容器 是这个超级工厂的 "核心" 所有从Bean都出自这里,我们只要给了 这个工厂 的 "生产说明" 或者说是 "生产清单" (applicationContext.xml),IOC容器就可以生产处我们想要的 Bean。所谓的AOP(面向切面编程)你可以理解为 "横插一杠",因为 这里的 Bean 是 IOC 容器生产的,所以IOC在生产它的时候可以改变它的行为,比如 一个 Bean A要做 发送邮件这个行为,但是我在 "生产说明" 中规定 这个Bean 在做发送邮件这个行为之前,还有一个Bean L要做记录日志行为,所以当这个Bean要发送邮件的时候,先让L 记录日志,然后才是B发送邮件。其实AOP就是在原有的执行顺序中切入一个新的行为。

  或者你可以把Spring 中的 IOC和AOP模块 比作操作系统的 Kernel,对于操作系统的Kernel来说,进度调度器的设计是关键部分,通过进程调度器,一方面 使用 "进程"(比作 Spring中的Bean)这个概念来抽象物理的计算资源,另一方面,可以通过调度算法的设计来实现对计算机资源的高效使用。对Spring来说也是一样的,一方面它通过IOC容器来管理Bean对象,以及它们相互之间的耦合关系,使企业的信息(数据)资源可以用简单的Java语言来抽象和描述;另一方面,可以通过AOP,以动态和非侵入的方式来增强服务的功能。当然 操作系统光有一个 Kernel 是不行的,我们还需要安装显卡驱动,鼠标和键盘驱动等驱动来驱动设备以方便我们的使用,这就好比Spring里面的事务处理,Web MVC, JDBC,ORM远端调用等。

  如果还觉得复杂,你就把Spring中的IOC和AOP模块 理解为 CPU及外围设备,其他的理解为 即插即用 设备。

  我们也可以这样理解Spring。我们的运用构建于 "超级工厂" 之上,运用里包含很多Spring 生成出来的Bean。

   AOP我们通过以下两幅图理解:

  本来我们按照正常的顺序执行方法:

  下面我在C方法之前切入方法 F:

  面向切面就是这么简单。

  从本质上来看,Spring容器就是一个“超大型”工厂,Spring容器中的Bean就是该工厂的产品。Spring容器能产生哪些产品,则取决于开发者在配置文件中的配置。

  对于开发者来说,开发者使用Spring框架所做的主要两件事:1 开发Bean;2 配置Bean。对于Spring来说,他要做的,就是根据配置文件来创建Bean实例,并调用Bean实例的方法,完成“依赖注入”——这就是IoC的本质。这就要求开发者在使用Spring框架时,眼中看到的“XML配置”,心中想到的是“Jav代码”。

转载于:https://www.cnblogs.com/xinshao/p/10862869.html

spring的历史与设计哲学相关推荐

  1. 走进Python--Python的历史及设计哲学与应用范围

    一.了解Python 1.Python,是一种广泛使用的高级编程语言.相比于C++或Java,Python能够让开发者用更少的代码表达想法.不管是小型程序还是大型程序,Python都能让程序的结构更加 ...

  2. Linux 的发展历史,设计哲学和一些常用的术语介绍

    1991 年,Linus Torvalds 还是芬兰赫尔辛基的一名学生,当时他开始了一个项目:编写自己的操作系统内核. 他还收集和开发了构建以他的内核为中心的整个操作系统所需的其他基本要素. 不久之后 ...

  3. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  4. Sparrow 框架设计哲学

    sparrow 框架 麻雀虽小,但五脏俱全 为什么要写这个框架? 这个框架我从11年开始写,中间重构了n遍,最原始的代码可能都找不到了,之所以坚持写,不是想新造轮子. 主要是从中学习基础原理. 经过近 ...

  5. 独家解读:魅族数据平台的设计哲学和核心架构

    由最初的纯设备生产厂商渐渐发展为今天的智能设备设计商和互联网服务提供商,"魅族"转眼间已经历了十年的成长,其Flyme系统也在逐渐走向成熟.而依托于Flyme的魅族互联网服务也逐渐 ...

  6. python的设计哲学_Python 的设计哲学

    The Zen of Python, by Tim Peters Python 的设计哲学,作者:Tim Peters Beautiful is better than ugly. 优雅胜于丑陋. E ...

  7. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  8. git add多个文件_Git之旅② - 子命令与设计哲学

    如果有人让你猜Git总共有多少子命令,你可能会在思索一番之后说:可能几十个吧(虽然常用的不超过10个).那么,当我告诉你大概有170多个时,你会是什么反应呢? 1. 所有Git子命令 Git版本号(这 ...

  9. Python(1)-源起、设计目标、设计哲学、特点

    python简介 1. python的起源 2. 解释器 3. python 语言的设计目标 4. python 语言的设计哲学 5. Python 特点 人生苦短,我用python–吉多·范罗苏姆( ...

最新文章

  1. 堡垒机jumpserver集群部署
  2. 元素 context:component-scan 的前缀 context 未绑定。
  3. Lesson 2.张量的索引、分片、合并以及维度调整
  4. MySQL Internals Manual
  5. 51单片机——硬件基础
  6. python核心理念_《Python核心技术第二版》笔记
  7. SpringCloud——消息驱动
  8. oracle 归档模式 ASM,oracle rac启用归档模式
  9. 不同IP网段连接网络打印机
  10. Java中文字转拼音工具类
  11. mysql查询姓名第二个字_第二篇:MySQL中SELECT查询语句总结
  12. 【备忘】修复过的SCCM报错
  13. 硬盘加密数据怎么恢复?BitLocker加密文件可恢复吗?BitLocker加密数据怎么恢复?
  14. 青龙面板--Nvjdc的搭建
  15. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法
  16. Springboot旧衣捐赠平台设计与实现 p40x5计算机毕业设计-课程设计-期末作业-毕设程序代做
  17. 编程进阶一:编译器的特殊功能使用及借助编译时完成数据的初始化
  18. java按比例压缩图片到指定的大小(kb、mb)
  19. getevent 获取报点
  20. mysql数据库5.7版本二进制安装与破解mysql数据库密码

热门文章

  1. 线程同步,通信与虚方法
  2. 今天的时间逻辑以及fix 一个 mysql 程序员错误的习惯
  3. 计算机应用技术课程本科,《计算机应用技术I》课程教学大纲(共本科29级用)().doc...
  4. ROS 搞懂多话题回调机制以及消息队列
  5. bzoj1057,poj3250
  6. 三维点云学习(3)1-聚类数学理论
  7. 计算机机房工程规划方案,机房工程规划书文档.docx
  8. winform listbox 没有listitem的问题
  9. ParallelActivity
  10. 摘录一些介绍Linux DKMS的博客文章