标签:
一直以来,我们应用了不少的AOP框架,但是对于AOP的底层实现却没有过多的深入,古话就是“知其然,不知其所以然”,随着AOP学术讨论的骤然兴起,我也开拓了自己的眼界,深入了解了AOP这个五彩斑斓的世界!
先来看看大众的定义:
百度百科:
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
维基百科:
面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计、观点导向编程、剖面导向程序设计)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。
侧面的概念源于对面向对象的程序设计的改进,但并不只限于此,它还可以用来改进传统的函数。与侧面相关的编程概念还包括元对象协议、主题(subject)、混入(mixin)和委托。
看了这些范范的定义,我也很晕,但是,我们可以从最简单的问题深入,这个简单的问题就是“我们为什么编程?”
我对这个问题的解答就是,为了不编程!我们创造函数,创造类,创造框架,创造软件,创造IDE是为了什么?是为了一步一步消灭人类的重复劳动!是为了解放人,让人发挥人最大的特质,就是思考和总结!
顺着这个思路,我们来还原AOP最初的样子:
在最初的程序设计中,我们需要为我们编写的每个类加上日志,事务控制!我们的程序猿老老实实写了N多的日志处理和事务处理!当有一天,有个程序猿突然说,我烦了这么繁重的工作,我一定要将代码中重复的部分拿到公共类中处理!
示意图:
经过一段时间后,某猿又不满意了,因为我还是要针对每个类调用公共类,他就翻看了设计模式,发现,代理是不错的解决方案,如果使用动态代理,就更有意思了
示意图:
两种动态代理示意图
又过了一段时间,程序员将动态代理与IOC结合,写出了一个框架,叫AOP框架,从此免费提供给所有需要这个业务的人,java又多了一个概念,就是AOP
概念示意图:
在计算机诞生之初,就是为了替人做一些重复性的简单的工作,随着计算机技术的深入,我们的这个初衷,一直没有变过,计算机最大的优点就是重复,作为程序设计者,在所有员工的工作中,我们是否都应该考虑,这个工作是必须的吗?这个工作是纯洁的copy吗?这个工作可以交给计算机来做吗?这个工作是不是一个人做了,大家都可以使用呢?这些工作,不仅仅需要设计师脑海中的经验,还有对于业务的抽象能力以及整体架构的把控力!
作为21世纪的程序设计者,你还在让员工做无谓的copy吗?
标签:
原文地址:http://blog.csdn.net/xvshu/article/details/44455655