转载一篇超牛的控制反转解释

A Quick Guide to Dependency Injection of IoC

鄙人今日研习Spring核心技术,乃百思不得起解;遂上大号排解郁闷。然一串掷地有声后茅塞顿开。不敢腋着藏着若小人状独享,故散尽思想普济天下,拯救计民于水火之中。



The following article contains coarse,disgusting idea and due to its content it is should not be viewed during the meal time or formal occasion.



什么是依赖注入?书中曰:控制反转Inversion of Control)的一种实现。这明摆了是不想让我等技术民工读懂。作者没有继续丧心病狂,继而给出一个小示例。我对着琢磨,以为原理并没有如此这般玄乎。先将此例改写为我理解的一个例子。



Interface Asshole{

void public makeShit( );

}



public class ShitContainerObject{

private Asshole asshole;



public ShitContainerObject(Asshole asshole){

this.asshole = asshole;

}



public void toMakeShitByEating(){

asshole.makeShit();

}

}



public class Vegetarian implements Asshole{

public void makeShit(){

//…素食者实际拉屎的过程

}

}



public class MeatEater implements Asshole{

public void makeShit(){

//…肉食者实际拉屎的过程

}

}





您没看懂代码无所谓,因为本来就没打算让您直接看代码就能明白什么是依赖注入,否则我掰活的东西和教科书没两样。

为了能将晦涩难懂的理论写成耳熟能详的大白话,我出此下策。举这个例子不是为了腻歪您,主要是拉屎这个赋有使命感的行为肩负起了解释技术原理的重担。

首先,马桶是一个大大的容器,能够容纳各种秽物。而且您应该明确这个观点:这个技术的根本目的就是让您和您拉的屎能够轻松的进行分离,不至于在您排泄的过程中拉的满裤子都是而无法清理,否则您就得通过其他手段,例如拿纸重新擦屁股,或者漂洗内裤乃至丢弃这样不可重用,且浪费资源的方法来解决拉屎难,且大便与屁眼儿无法及时分离的困难。



解决这个问题的根本思想就是设计一个接口――屁眼儿,让您进食之后能够及时将大便排泄出体外。所以,我们进行消化这个动作是依赖于屁眼的,同时在另一方面,在马桶容器这边,需要提供一个能够接纳屁眼放置在其内的空间,以便能够通过存储大便的这个方法来获得对人拉屎这个动作的控制,人就是这样依赖于屁眼将大便注入到马桶里的。



上文的最后一句话,基本上属于依赖注入这项技术的一个论证。



如果我们把目光放的更宽泛些,您也许会发现,人吃进去的是蔬菜,是鱼肉,怎么到马桶这样一个输出端就变成屎了呢,按道理,蔬菜和鱼肉排泄在马桶里还应该是原来的东西啊?如果您仔细理解了:容器本身是不对接口有任何实现的,即马桶本身不具备能将屎变成蔬菜和鱼肉的功能。您发散下思维也许看的更清楚。农民伯伯会把这些屎尿播撒在田地里,然后它们滋润着蔬菜苗们的生长,给周围鱼塘供以新鲜食料…从这个角度来看,注意,农民伯伯也有屁眼,所以他肯定实现了屁眼这个接口。具体将屎尿转化为蔬菜鱼肉这个过程其实是由农民伯伯来具体实现的,我们所要做的就是将其过程逆化,其结果就是有人在一边种,有人在另一边吃,本来农民是天下的主人,我们这帮孙子在人头上吃喝拉撒,您瞧,这在根本意义上不就是自然而然的控制反转么?


还有一点注意,屎和蔬菜鱼肉在根本上没有任何区别,只是对于人这一端来说需要加以判断;识别出来它们是蔬菜鱼肉才敢吃,否则吃到屎就该报错了。这点和Spring技术本身没有任何出入。



如果上述简明教程让您发毒誓以后不想学习Spring技术了,我只能说,压根就不是我的错…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值