0%

IOC底层原理

spring入门:第一节——IOC的底层原理

PS:该文章只是做一个理论梳理和介绍,还需要结合实际操作来掌握知识,该篇文章仅作为概念介绍和对实际操作的梳理,如果有帮上忙的话,非常荣幸。

1.为什么要用spring:spring是一种框架,使用spring框架可以大大的降低代码的耦合度。

2.什么是耦合度:耦合度指的是类之间的依赖程度,比如我有好多个类B,C,D,它们都使用了A类的属性和方法,

class B{

A user = new A();

A.第一个方法();

A.第二个方法(参数1,参数2);

……

}

当A发生修改或者被删除的时候,开发者需要同时更新B,C,D中的A的路径,A的方法和参数,这就是所谓的依赖度高,或者官方一点,“高耦合”,这样十分的麻烦,也十分的冗余,特别是在大工程中,程序员无法记住所有自己使用某个类的地方,如果程序员长期在高耦合的情况下进行开发,程序最终一定会因为没有全部更新而彻底崩溃,这不符合开发中的“开闭原则”(开指高的可拓展性,闭指低耦合,具体词条请自行百度)。

3.那么要如何降低耦合度呢:这就是引入spring框架的必要性,也是接下来要讨论的spring的IOC容器,IOC容器要做的就是依赖反转(将依赖关系反转),降低程序的耦合度。

4.IOC容器如何做到降低耦合度:IOC容器通过xml解析,工厂模式,反射来降低耦合度。

5.xml解析:将类放入xml文件的bean标签中,bean标签有两个属性,一个是id,id名相当于人的名字,只要独一无二可以辨认即可,随意取名也是可以的,还有一个属性是class,这个属性存放的是类的完全路径,用于指向类,还有一个属性是name,听说近年来被id取代了,这里不作讨论。

6.工厂模式:

工厂模式做到的低耦合:工厂模式中创建了一个工厂类,并且将获取A类的工作委托给了工厂类,这时候,B,C,D再想要调用A类只需要调用工厂类的方法即可,当A类发生更新的时候,只需要更新工厂类即可,而不需要同步更新B,C,D类,这样就降低了耦合度。但是工厂类只是提供了获取类的方法,并没有降低调用方法时的耦合度,B,C,D类调用A的方法时还是需要经常更新A新增加的各种方法。

7.反射。反射的作用是获取类的元信息,整个流程如下:

class factory{ //反射是在工厂类中进行的

String value = class属性值(类的完全路径) //xml解析的路径

class x = new class.forName(value) //这一步就是反射,获取类的字节码元信息,通过class和它的forName方法获取类的元数据信息对象(这个对象保存了类的属性,构造函数,方法)

return (A)x.newInstance();

}

IOC容器通过xml解析,工厂模式和反射进一步降低了耦合度,获取类的属性,方法,构造函数这一步全都由反射完成了,不再需要开发者手动进行更新,开发者只需要在类的完全路径发生改变的时候更新xml解析中的类的完全路径即可,类的属性等各类更新工厂类都会自发的完成,并将更新后的类实例化后返回。