10年架构师告诉你,他眼中的Spring容器是什么样子的
相关文章
成长的故事之Spring Core系列
你是如何看待Spring容器的,是这样子吗?
Spring的启动过程,你有认真思考过吗?(待写)
面向切面编程,你指的是Spring AOP吗?(待写)
Spring的声明式事务,这次你彻底明白了吧?(待写)
§如何提问,如何回答?
记得大学时,思想道德修养课的老师说过,现在的大学生都不太会表达自己的观点。她举了这么个例子,如果你在食堂,随机采访几个学生,就问:“你觉得食堂的饭菜怎么样啊?”
你得到最多的答案大概是像这样的,“不错,挺好吃的”;“不行,太难吃了”;“凑合,感觉还可以吧”。
原因有两方面,一是学生不知道该如何对一个事物发表自己的观点,也就是自我表达能力有点差。二是提问的问题本身存在问题,太宽泛了,学生不知道该怎么接。诸如此类的“你是如何看待XXX的?”这样的问题,感觉是最难回答的。
但我要说的是,如果你能把这类问题回答的很好,那你真的已经相当厉害了。
§从面试别人说起
说起来我也面试过几十个人了,不过说实话,我并没有一个很好的套路或方法去面试别人。我一般不会特别在意应聘者截至到现在拥有多少知识,或会多少技术。注意我说的是一般情况下不会。
原因有二,一来我们不是造航母,招的就是拧螺丝的。二来我更在意一个人对他已有知识,或已经会用的技术的看法。
因为一个问题的结果无非就是一些答案。但是一个看法的结果却是一些观点。一个人能够当众发表一些很有看法的观点,说明的他的业务/技术素质和心理素质都很不错。
所以对于应聘者,我都会问,你如何看待Spring?大都回答Spring是一个IoC容器,然后就没有了。其实我真正想知道的是你眼中的Spring是什么样子的。
然后我继续问,什么是IoC?大都答道控制反转或依赖注入。我再问,你如何理解控制反转呢?几乎没有人能很好的回答。
既然是一个IoC容器,那你怎么理解“容器”二字?几乎也没有人能回答的很好。
§C语言中的全局变量
计算机专业一般都会学C语言,倒不是为了做项目,只是作为入门语言。C语言是面向过程的,没有类、字段等这些概念,只有函数和变量。
刚开始接触程序和语言时,大都水平不高。用的最多的就是全局变量,而且觉得特别好用。
原因有二,一是只要在一个全局位置定义好,后面程序中的任何地方都能够访问到它。二是因为全局可访问,所以不用去考虑或规划,如何定义变量,怎么在函数间传递或返回。关键作为初学者,不一定能够做好这“简单”的事情。
全局变量非常简单好用,和goto语句一样。但逐渐都不推荐再使用或被淘汰了,因为它们太灵活了,不太好控制,特别是后期代码量越来越多的时候。
如果发明一种东西,像全局变量一样简单好用(继承优点),但同时又能够很好地控制住(改进缺点),它能不火起来吗?很显然,Spring就具有这种特性(虽然现在的Spring已经足够复杂了)。
§Spring很好用,真的
BAT之所以牛逼,就是因为它们都在各自的领域,彻底改变了人们的方式。Spring也彻底改变了人们的编程方式。
类似的还有Struts/SpringMVC彻底改变了开发web应用的方式,Hibernate/Mybatis彻底改变了访问数据库相关代码的方式。
Spring的全局性
人类抬头,看到的是天。代码抬头,看到的是Spring。在任何地方,代码都可以和Spring交互。可以这么说,代码几乎是在Spring的管控下运行的(虽然这样讲不是很精确)。
Spring的解耦性
这里指的更多是开发方式上的解耦性。例如,从类A把B传给类C,原来的做法是直接传,这样A和C就耦合了,其实它们本没有关系。
现在只需在类A里把B放入Spring中就完事了。然后在类C里再从Spring中取出B就可以了。A和C就解耦了,因为Spring充当了中间人。
Spring的易用性
Spring就像你的秘书/管家,需要什么服务,告诉它,它给你提供。需要发号施令,告诉它,它帮你执行。
就把Spring想象成你头顶的容器,需要从里取东西,伸开胳膊拽下来的就行了。需要往里存东西,胳膊用力推上去就行了。整个过程你甚至都不用抬头。
PS:Spring仅仅是个容器吗?请持续关注后续文章!
经典文章推荐
(完)
编程新说
用独特的视角说技术
10年架构师告诉你,他眼中的Spring容器是什么样子的的更多相关文章
- MySQL不香吗,清华架构师告诉你为什么还要有noSQL?
强烈推荐观看: 阿里P8架构师谈(数据库系列):NoSQL使用场景和选型比较,以及与SQL的区别_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com noSQL的大概 ...
- Java架构师告诉你Spring IoC有什么好处呢
前言: 这个问题也一直困惑我很久,毕竟其他语言没有IOC也活的很好. 但是Spring在当时能够一统江湖,跟IOC真的有很大的关系. 在没有IOC的时代,New代表一切,女朋友都是可以New出来的. ...
- 阿里十年架构师告诉你Spring Boot与Spring Cloud是什么关系
SpringBoot先于Spring Cloud问世.SpringBoot相当于脚手架,借助他可以快速搭建房子,它本身不具备任何功能属性,值是普通房间,没有其他任何功能. 什么是Spring Boot ...
- 剑指架构师系列-InnoDB存储引擎、Spring事务与缓存
事务与锁是不同的.事务具有ACID属性: 原子性:持久性:由redo log重做日志来保证事务的原子性和持久性,一致性:undo log用来保证事务的一致性隔离性:一个事务在操作过程中看到了其他事务的 ...
- 一位10年Java工作经验的架构师聊Java和工作经验
从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源软件推动者之一, ...
- 转:一位10年Java工作经验的架构师聊Java和工作经验
黄勇( 博客),从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源 ...
- [转载]有经验的Java开发者和架构师容易犯的10个错误
首先允许我们问一个严肃的问题?为什么Java初学者能够方便的从网上找到相对应的开发建议呢?每当我去网上搜索想要的建议的时候,我总是能发现一大堆是关于基本入门的教程.书籍以及资源.同样也发现网上到处充斥 ...
- 百度测试架构师眼中的百度QA
百度测试架构师眼中的百度QA(一) 发表于2013-04-09 15:31| 4004次阅读| 来源架构师Jack的个人空间| 13 条评论| 作者董杰 百度测试QA 摘要:一直以来百度质量部在业 ...
- Java 架构师眼中的 HTTP 协议
HTTP 协议的内容比较多,本文我们将分六部分来介绍. HTTP 协议的基本内容 什么是 HTTP 协议 首先我们来看协议是什么?协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守有规则的文 ...
随机推荐
- 可视化利器Visdom
可视化利器Visdom 最近在使用Pytorch炼丹,单纯地看命令行输出已经无法满足调试的需求,尝试了facebook开源的visdom,感觉非常优雅,支持numpy和torch 安装 $ pip i ...
- 《SpringMVC从入门到放肆》十、SpringMVC注解式开发(复杂参数接收)
上一篇我们学习了简单的参数接收方式,以及对编码的统一处理.今天我们来接收对象参数. 一.接收对象参数 jsp页面: <%@ page language="java" impo ...
- Qt5+MSVC2015环境将VS2015编写的控制台程序转化为GUI程序
如题所述,如何将VS2015编写的控制台程序转化为Qt5+MSVC2015环境编译的GUI程序? 最近想到这个操作,类似于Linux下使用的命令行操作转到Windows下使用GUI操作,看了控制台的命 ...
- PLC不能初始化问题
检索COM 类工厂中 CLSID 为 <28e68f9a-8d75-11d1-8dc3-3c302a000000> 的组件时失败,原因是出现以下错误: 80040154 解决方案: Win ...
- thinkphp 单图上传组建成数组然后追加到一个字段
//上传的数组字段 $note1 = input('note1'); $note2 = input('note2'); $note3 = input('note3'); $note4 = input( ...
- BUAA-OO-第一单元总结
BUAA-OO第一单元博客总结 第一次作业总结 (1)类关系图 第一次作业类图关系简单,仅有一个Poly封装类以及一个Main主类调用Poly,Poly封装类内部完成了包括对象构造,求导,生成字符串的 ...
- sqlmap Windows 安装教程
第一步:下载 python :https://www.python.org/downloads/ (这里有python各种版本,但是一般建议安装3和2.7) sqlmap:https://git ...
- css基础样式
1.行间样式:在标签中添加<style>属性 格式:标签名 style="样式:样式值1;样式2=样式值2" 2.内嵌样式:在<head>&l ...
- javascript的数组之reverse()
reverse()方法将数组中所有元素的位置颠倒,修改原数组,并返回一个原数组的引用. var array1 = ['one', 'two', 'three']; var reversed = arr ...
- Reactjs组件中的方法为什么绑定this?
前言:Reactjs中的定义的方法其实是基于实例的原型方法:es6默认严格模式 问题:在Reactjs组件中写入以下代码,那么执行结果会是什么呢? ··· 结果是这样的: 对的,你没看错,不是do ...