依赖注入-控制反转(IOC)的好处是什么?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010588262/article/details/81773398

之前只是知道Spring的精髓是依赖注入,控制反转,也只是知道这些名词而已,没有理解到精髓,今天看了知乎的一篇文章茅塞顿开,建议跟我一样迷茫的都看下:

https://www.zhihu.com/question/23277575

这篇是读后感,对自己的理解再做个总结吧

正依赖

依赖反转,从字面理解就是把依赖倒过来了呗,那原来依赖正着的时候是啥样的呢?

正着的时候是上层建筑依赖下层建筑,依赖方式是在自己构造的时候把下层先构造好,比如BirdWing

public class Bird {
    Wing wing;

    public Bird() {
        wing = new Wing();
    }
}

class Wing {
}

Main方法:Bird bird = new Bird();

这就是典型的上层依赖下层(为了更方便理解,可以直接把依赖理解为依赖构造函数),这样的坏处是如果下层的构造函数改了,增减了参数,那上层的构造函数也得加上类似的参数,那如果上层还有上层呢?就要一层一层加上去(如果这里不理解的话建议戳上面的链接看知乎原文,答主说的肥肠清晰)。唯一的好处是Main方法倒是很简洁。

依赖反转

这里按照上面的理解(为了更方便理解,可以直接把依赖理解为依赖构造函数)叫做取消依赖更合适一些,就是上层不再依赖于下层的构造函数,怎么做到的?下层直接构造好,把整个下层当做参数传进来:

public class Bird {
    Wing wing;

    public Bird(Wing w) {
        wing = w;
    }
}

class Wing {
}

Main方法:Wing wing = new Wing(); Bird bird = new Bird(wing);

这样做,如果Wing类构造函数加个参数,只需要改Main方法就行了,坏处是如果建筑层数很多的话,需要从低到高一个一个new,如果用到的地方很多,每次创建一个顶层对象都要这样那真的很麻烦

怎么简化构造代码?

就是把构造的代码封装起来呗,所有地方都调用封装好的方法创建顶层对象
Spring更高级一些,通过注解或配置文件的方式,你连一次都不用自己写,不用知道这个从底层要高层的链路,只需要通过注解或者xml告诉Spring这个类依赖的下层类是什么,下层类自然也有自己的依赖,Spring会自己一层一层地往下找,然后从最底层开始new,直到返回顶层建筑对象

猜你喜欢

转载自blog.csdn.net/u010588262/article/details/81773398