用通俗的话解释java的AOP, 所谓面向切面编程
2016-08-18 本文已影响340人
冷淡的甘蓝
不知道为什么, 计算机界的人写的文章都非常的难懂.
一度让人怀疑是不是自己的问题.
一开始的"对象"这个词就有问题, 生成一个对象, 为什么不叫生成一个实例呢? 明显实例好理解多了, 而且"对象"还有歧义.
还有一个什么"最佳实践". 什么鬼! 其实就是"最好这么做"或"推荐做法".
特别是这个AOP(面向切面编程), 这种名字就叫人看不懂, 什么切不切面的.
为什么要起这些奇怪的名字呢, 是不是有什么阴谋?
好, 来说一下.
所谓AOP, 叫做"代码插入式编程风格"好理解一点.
在"对象风格编程"时代, 一发现有重复的代码, 人们就将这块代码抽出来成为一个类. 用这个类来管理这些代码.
但是, 不是所有的重复代码都抽得出来, 有时需要在代码的前后插入.
用对象抽象方法就非常麻烦.
这时有人就想出一方法, 在编译时在这段代码的前后插入代码.
有人给这个事情命名什么切面...还拉面呢.
顺便说一下所谓的"动态代理". 说得云里雾里的.
其时就是, 实现AOP的一种方法.
在运行时, COPY一个类, 就是创建它的分身, 给这个分身插入额外的增强代码.
执行任务的时候, 就用分身来进行.
这就是影分身之术!
所以, 面向对象编程, 什么对象不对象, 还面向领导编程...
不如叫 物体化编程.
改叫法这种事情已经有先例了. Martin Fowler就觉得"控制反转"这种叫法莫名其妙, 不如叫"依赖注入".