Java自学,如何玩转IoC-?跟着我的脚步
第一章 Overview,讲述它的历史、设计原理等等;
第二章 Core,包含了 IoC 容器,AOP 等等,那自然是讲 Spring 的核心了,要点进去好好看了。
点进去之后发现了宝贵的学习资料,一切的 what, why, how 都可以在这里找到答案。
这里很好的解释了大名鼎鼎的 IoC - Inversion of Control, 控制反转。
每次读都会有新的体会和收获。
我粗略的总结一下:控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。
容器负责创建、配置和管理 bean,也就是它管理着 bean 的生命,控制着 bean 的依赖注入。
通俗点讲,因为项目中每次创建对象是很麻烦的,所以我们使用 Spring IoC 容器来管理这些对象,需要的时候你就直接用,不用管它是怎么来的、什么时候要销毁,只管用就好了。
举个例子,就好像父母没时间管孩子,就把小朋友交给托管所,就安心的去上班而不用管孩子了。
托儿所,就是第三方容器,负责管理小朋友的吃喝玩乐;
父母,相当于程序员,只管接送孩子,不用管他们吃喝。
等下,bean
又是什么?
Bean 其实就是包装了的 Object,无论是控制反转还是依赖注入,它们的主语都是 object,而 bean 就是由第三方包装好了的 object。(想一下别人送礼物给你的时候都是要包装一下的,自己造的就免了。
IoC 容器
既然说容器是 IoC 最重要的部分,那么 Spring 如何设计容器的呢?
还是回到官网,第二段有介绍哦:
答:使用 ApplicationContext
,它是 BeanFactory
的子类,更好的补充并实现了 BeanFactory
的。
BeanFactory
简单粗暴,可以理解为 HashMap:
- Key - bean name
- Value - bean object
但它一般只有 get, put 两个功能,所以称之为“低级容器”。
而 ApplicationContext
多了很多功能,因为它继承了多个接口,可称之为“高级容器”。在下文的搭建项目中,我们会使用它。
ApplicationContext
的里面有两个具体的实现子类,用来读取配置配件的:
ClassPathXmlApplicationContext
- 从 class path 中加载配置文件,更常用一些;FileSystemXmlApplicationContext
- 从本地文件中加载配置文件,不是很常用,如果再到 Linux 环境中,还要改路径,不是很方便。
当我们点开 ClassPathXmlApplicationContext
时,发现它并不是直接继承 ApplicationContext
的,它有很多层的依赖关系,每层的子类都是对父类的补充实现。
而再往上找,发现最上层的 class 回到了 BeanFactory
,所以它非常重要。
要注意,Spring 中还有个 FactoryBean
,两者并没有特别的关系,只是名字比较接近,所以不要弄混了顺序。
为了好理解 IoC,我们先来回顾一下不用 IoC 时写代码的过程。
深入理解 IoC
这里用经典 class Rectangle
来举例:
- 两个变量:长和宽
- 自动生成
set()
方法和toString()
方法
注意 ⚠️:一定要生成 set()
方法,因为 Spring IoC 就是通过这个 set()
方法注入的;
toString()
方法是为了我们方便打印查看。
public class Rectangle {private int width;private int length;public Rectangle() {System.out.println("Hello World!");}public void setWidth(int widTth) {this.width = widTth;}public void setLength(int length) {this.length = length;}@Overridepublic String toString() {return "Rectangle{" +"width=" + width +", length=" + length +'}';}
}
然后在 test
文件中手动用 set()
方法给变量赋值。
嗯,其实这个就是「解藕」的过程!
public class MyTest {@Testpublic void myTest() {Rectangle rect = new Rectangle();rect.setLength(2);rect.setWidth(3);System.out.println(rect);}
}
其实这就是 IoC 给属性赋值的实现方法,我们把「创建对象的过程」转移给了 set()
方法,而不是靠自己去 new
,就不是自己创建的了。
这里我所说的“自己创建”,指的是直接在对象内部来 new
,是程序主动创建对象的正向的过程;
这里使用 set()
方法,是别人(test)给我的;
而 IoC 是用它的容器来创建、管理这些对象的,其实也是用的这个 set()
方法,不信,你把这个这个方法去掉或者改个名字试试?
几个关键问题:
何为控制,控制的是什么?
答:是 bean 的创建、管理的权利,控制 bean 的整个生命周期。
何为反转,反转了什么?
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外想要面试题及答案的小伙伴请点击这里自行领取,本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
大家都会有这些感触。
**另外想要面试题及答案的小伙伴请点击这里自行领取,本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
Java自学,如何玩转IoC-?跟着我的脚步相关推荐
- JAVA自学笔记22
JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...
- 我与Java的故事以及0基础Java自学之路(2022最新版)
文章目录 我与Java的故事 一.JSP.Servlet推荐自学路线 二.Spring推荐自学路线 三 SpringMVC推荐自学路线 四 Mybatis.MyBatisPlus推荐自学路线 五 Sp ...
- [转]尚学堂科技 - 马士兵老师-JAVA自学之路
[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 一:学会选择 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_1.html] 为了就业,不少同 ...
- JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]
(我觉得看了之后挺不错的所以分享一下) JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3 ...
- 大学四年因为知道了这30个超强Java自学网站,毕业直接让我月薪过万!
不多说废话,咱直接上干货,记得看完一键三连哦(点赞+评论+收藏)!对了,最后一个超级强! 1.learnjava 官网地址:https://www.learnjavaonline.org/ 是一个交互 ...
- 我的java自学经历,土木转行java的
本人土木工程出身,毕业在深圳混了三年之后(2018年初25岁,同学们可做参考),开始学习java.经过一年鏖战,终于入职.(没有参加培训,可能培训班的同学比我优秀哈).虽说只是入行,但也算是一个对自己 ...
- JAVA自学之路——马士兵
JAVA自学之路--马士兵 2007年11月06日 星期二 05:47 P.M.[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 一:学会选择 [转载请注明出处:http://ww ...
- Java自学之路 - 马士兵
一.学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不 ...
- JAVA自学之路 七:路线图明细
[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 七:路线图明细 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html] 下面给出第二节 ...
最新文章
- @apioperation 作用_石莲子的功效与作用分享
- Uva 11997 多路归并
- linux 删除o开头的文件,linux实现除了某个文件或某个文件夹以外的全部删除
- Android中的ListView
- VS2015 代码左缩进
- 基于matlab的回波,基于MATLAB回波信号产生与消除.doc
- puppet(2)-资源介绍
- 作者:海沫,女,博士,中央财经大学信息学院副教授,CCF高级会员。
- c++ regex用法实例 2
- 数据:以太坊2.0合约余额新增1.28万ETH
- dubbo升级spring4与cxf
- 动态得到查询结果后绑定
- eclipse maven tomcat 部署
- Chrome最新版本如何通过JS设置支持自动播放音频
- 1t98cp.com main.php,SCTF2019 Writeup——De1ta
- 关于UE4中VR项目优化小记
- Scratch源码使用ArduinoConnector.ane与串口通信
- python二分法查找程序_基础算法——查找(二分法)(python)
- 四川省种业支持项目补贴申报对象补助
- 基于SSM 的垃圾分类管理系统
热门文章
- 一个半路出家十年Java老程序员的真实经历
- NCC 测试openapi
- matlab 动态存储图片,Matlab刷新图像及保存.gif动图的简单方法
- 大学计算机专业容易挂科的内容,大学最“烧脑”的3类专业,很容易挂科,但就业前景一片大好!...
- 以为是 unable to start correctly (0xc0000142) 实际上却是 gfluidimgproc_func.simd.hpp文件找不到的解决方法(含opencv编译使用)
- 英特尔傲腾憋大招,将与Sapphire Rapids至强相伴而来
- 有理数计算器(程序类图、流程图)
- 明日之后怎么找不到朋友服务器,明日之后搜索不到好友 搜索添加好友教程
- ip数据包经由路由转发的时候源ip,目的ip是否改变
- 【论文阅读】【三维目标检测】VoteNet:Deep Hough Voting for 3D Object Detection in Point Clouds