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仅仅是个容器吗?请持续关注后续文章!
经典文章推荐
(完)
编程新说
用独特的视角说技术
最新文章
- [转]iOS代码块Block
- apk添加系统签名
- 如何选择 H5 游戏引擎
- android ndk开发(二)实现一个官方demo
- DLL放在指定目录 以及设置dll调用路径
- VS链接过程中与MSVCRT.lib冲突
- 三部曲一(数据结构)-1011-Sorting It All Out
- Makefile技术和应用总结
- java中Map,List与Set的区别
- Javaweb实现的优优图书商城(含源码)
- 封装兼容性添加、删除事件的函数 addEventListener与removeEventListener
- Android 轮询之 Service + AlarmManager+Thread (转)
- java设计模式之四建造者模式(Builder)
- Ubuntu下安装Node.js
- python3 第三章 - 程序的基本结构
- 运行C++程序是出现错误:cannot open Debug/1.exe for writing
- 关于WCF服务 http://XXXXXX/XXX/xxx.svc不支持内容类型 application/sop+xml;charset=utf-8 错误解决方法
- 修改Linux主机名
- 使用 Docker 镜像构建 GO 语言环境
- [转]HEX文件格式解析
热门文章
- webpack 4+ vue-loader 配置 (完善中...)
- Spiring系列__03IOC补充
- 关于 Mybatis 设置懒加载无效的问题
- 算法第四版中 while (!StdIn.isEmpty()) 循环无法跳出问题
- LDAP &; Implementation
- sortable的基本属性
- 问题解决:Spyder不支持OpenCV模块代码提示
- vue的风格指南(必要的)
- Shell 脚本处理用户输入
- python面向对象的知识梳理