不完全的意味着:
- 内容不完全正确,因为初接触时无法保证理解准确,随之学习的深入,自然更正某些概念
- 不一定会学完,一旦学到我自认为可以,就停止了,不会追求完整
Let's Go!
- 什么是spring ?
spring是IoC框架 - 什么是IoC?
Inversion of Control:控制的反转,字面理解反转了控制 - 控制是什么意思?
控制的对象是面向对象中object,控制是谓语,object是宾语 - 谁在控制
谁用对象谁控制,如 Java中有一个ArrayList类,如果你想用它你需要:
List<String> aList = new ArrayList<>()
aList.add("hhhhh");
new 就是一种控制,你在控制它的创建,所以控制的主语是“你”,是需要用到ArrayList的人
- 控制的反转是怎么反转的?
不反转:程序员 控制 对象,反转可不是:对象 控制 程序员;而是:
一段程序(一个盒子) 控制 对象 ;从这个意义看反转控制这个词不好,应该叫控制移交 - 那“反转”后代码会有什么变化?
代码可以写成:
List<String> aList ;
aList.add("hhhhh")
- 不报空指针异常吗?
如果想不报,要有个黑盒子替你干了new ArrayList<>()
这个活 - 没错,spring可以干这个事,但需要你的配合?
- 配合什么?
嗯,有点复杂,我么还有些问题需要解决,这个问题一会谈,换一个话题吧 - 好吧,那为什么要反转呢?
这个还要问吗?看来基础不强,你试着理解以下的话吧,其实不难:
//没反转控制
List<String> aList = new ArrayList<>();
//反转后
List<String> aList
反转后是不需要为aList初始化一个具体类型,如果上述的逻辑是一段业务代码,而aList有多个实现,那这段代码不会因为具体的类型(ArrayList)需要修改
- 面向接口或抽象编程,懂了。
其实可以进一步想象成,你根据实际的问题,建模了一个数学公式,比如:Z = f(x,y) ,如果f的逻辑不变,你只需要喂给这个公式符合要求的x,y的具体值,那么就能得到Z。把那些对x,y具体求值的工作可以交给一个“计算器”干。这里,作为程序员的你告诉计算机一个运算逻辑,运算逻辑由操作符和操作数组合而成,你给一个单子,把操作数和具体的值对应起来,如果计算机有一段程序(暂时叫盒子)是从你的单子中取出具体的值,喂给你的程序,它就能工作了,如果运算逻辑不变,操作数的类型变了或者取值范围变了,你只需要修改那张单子就可以了。所以像new 这种把操作数具体赋值的工作可以交给这个盒子干就行了。你就不必关心了。你的责任由原来的定义运算逻辑,为操作数赋值这两个责任,变为定义运算逻辑,告诉计算机怎么为操作数赋值了。你的责任就成了要开发更具通用性的运算逻辑。 - 这和Spring有什么关系?
Spring就是这个盒子啊!“专业人士”给了一个很nb的名字:容器。之后,应该用“容器”这个词了 - 那我需要如何和Spring“合作”?
有一个最基本的方法,给它一张单子,描述你要用到的对象,以及这个对象到哪能找到,便于它为你创建它;你还要告诉它,这个对象有哪些属性,这些属性如何取值,便与他设置或初始化对象。你可以想象:
Student aStudent = new Student();
这段代码,你写成了:Student aStudent;
,然后期望容器替你完成new的动作,你显然需要告诉它去哪找一个符合Student类型的类,实例化成对象:所以你需要告诉spring:<bean name="studeng" class="xxx.xxx.Studeng">
......
14.IoC大概懂了,找些例子学学怎么写给spring的这张单子,暂停,去找点例子,写点代码了。
网友评论