Spring IoC有什么好处呢? - Mingqi的回答 - 知乎
https://www.zhihu.com/question/23277575/answer/169698662
Spring IoC有什么好处呢? - Eric的回答 - 知乎
https://www.zhihu.com/question/23277575/answer/24259844
都是大神啊,这回答,爆炸了。
看了大神的回答,有种茅塞顿开的感觉,模模糊糊能感觉到什么,所以还是加上自己的理解,写点东西。
IOC(Inversion of control)控制反转。
DI(Dependency Injection)依赖注入。
DIP(Dependency Inversion Principle)依赖倒置原则。
根据依赖倒置原则提出了控制反转思想,根据控制反转思想实现了依赖注入方法。
大神举了汽车轮胎的例子,我也想到一个我生活中的例子。
其实就像做数学题一样:
一道数学题摆在面前,解决思路大概就两种。
1、一种是思考已知条件,推出隐藏的未知条件,接近答案,如果思路不对,回到上一步,继续走别的思路,这样做不好地方就在于:如果前面全部推断出来,最后一步拿出答案的时候思路错了,需要从头开始想。
2、第二种是从问题出发,思考答案依赖什么条件得出,所依赖的条件又是依赖什么已知信息的出来的,最终推到已知信息。然后从已知信息写到答案,拿到想要的东西。
控制反转的思想就是第二种解决数学题的方法。
那这个例子里依赖注入又是什么呢?
就是具体的实现方法呀,把答案当成结论带入它所依赖的上一步条件,再把条件当成结论带入新的条件或者已知信息。
那控制反转容器呢?这就作弊了,把所有已知信息都注册到容器里面,由容器管理所有信息的依赖关系。当你需要知道答案的时候,直接向容器请求就行,容器已经把具体依赖的关系隐藏了起来,它会自己在注册的内容里面查询各个条件的依赖关系,找到所要的答案。我们没有必要知道这个过程。
所以,考试时候,我们自己从答案出发,反推到已知信息,再从已知信息写到答案,这个解决过程,就是容器内部运行的过程。
网友评论