依赖注入(DI,Dependency Injection):假设你是一个特工人员,需要C4 炸
药去炸毁桥梁。一种办法是出发的时候自带100 公斤C4,到了地方引爆,这相当于我们常
见的自己给变量赋值然后调用;另一种办法呢,是当你到达目的地以后,呼叫总部空投200
公斤C4 炸药,然后你可以炸毁不止一座桥梁,这就相当于你在需要的时候被注入了200 公
斤C4,因为你不知道总部使用的是哪架战机,但是它知道你在什么时候和什么地点需要这
些炸药,换句话说,控制权在总部那,这就引出了另一个术语IOC(控制反转,Inversion of
Control),意即你现在只需要埋头写自己的代码,容器(总部)知道什么时候给你合适的
对象(炸药)。
AOP(Aspect Oriented Programming,面向切面编程):假设你被联邦调查局盯
上了,怀疑你和基地组织有一腿,那你就惨了,可以亲身感受AOP 的威力。打电话,有人
听;出门吃饭,有人在你饭里下毒;开汽车,发现车后有人为你“保驾”。也就是说你发现
以前能够直接操作的东西都被人过滤了,被人先行做了手脚。其实Web 开发中的过滤器就
是这样做的,那就是一个AOP 的例子。这个中间被强插入的一层,就是切面(Aspect)。
好的情况下你还能发现切面(暗探)的存在,差的情况下你压根不知道被人做了手脚。好
了,这就是AOP,就是那个对你下黑手的对象。