I. AOP的例子
1, Google Toolbar: 拦截弹出式窗口,为ISBN加上到Amazon的链接
原始的html文档对google toolbar对它做的手脚一无所知,toolbar得到原始文档后开始根据特定的匹配条件往里面织入代码:
如果里面有调用弹出式窗口的代码,就围绕着这段代码插入注释
如果里面有ISBN号码,就为这段文本插入一段链接<a href="http://www.amazon.com/isbn=xxxx">之类的
最终显示在浏览器里,将少了弹出式窗口代码,多了ISBN的链接
2, Ctor/Dtor
其实传统的支持面向对象的语言也已经不自觉的包含了现在被称为AOP的思想,这就是构造函数和析构函数:编译器自动在对象创建和对象销毁时插入代码,这里的Aspect是“为对象自动管理资源获取和释放的时机”;这种思想扩展一下,比如说在进入或退出特定函数时插入代码,就是AOP了
II. IoC的例子
电梯
即使已经开始接受高等教育,我在前几次使用电梯时依然犯错:当我在较高楼层想下到一楼而此时电梯在较低楼层时,我的第一反映是让电梯上来我好乘坐,于是便按了“上”的按钮,结果是当我进入电梯后,电梯并没有如我希望的那样开始下行,而是继续上行;后来我在医院里,观察到很多如我一样来自农村没有接触过电梯的病人家属,不断的犯着同样的错误
其实当然电梯的使用是及其简单的:当你想下时就按“下”,想上时就按“上”,即可;当你想自己“控制”电梯时,事情就变得麻烦了
因此电梯和IoC的思想是一致的:说出你的需求即可,背后的控制由系统来做