AOP (面向切面编程)的简单理解

概念
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
我的理解:
首先我要说一句,反射技术的出现,是AOP产生的技术基础。
先说说软件的革命吧;
面向结构编程:函数时主力。
编写对象:对象成了主力。
前两次革命的优点我就不说了,那么,现实的生活中我们有这么一种情况。
无论类呀,函数啊,怎么的设计,总有一个方面的共性是分布在不同的对象和函数中的。
就比如提交表单吧,这是应应用系统几乎很普通的一个功能,这个表单的提交是在不同类中进行,
虽然都叫表单提交,但是他不属于任何一个对象,甚至不属于任何一类对象。
如果我们想对表单的提交动作都做一些相应的处理,就需要把机能插在这个切面上,
如果我们通过继承的角度来插入这个切面,可能复杂度,和灵活性都是不可接受的,
这时候,我们可以通过反射的技术,把一个机能引入到这个切面。这想比继承要容易的多吧。
并且我们要在系统中控制的不一定只这一个切面,可能有很多,这样的话用面向对象的技术几乎是解决不了的。
所有有了这么个概念,面向切面编程,这是从系统中提取的一个比抽象更抽象的面,应该说和对象不在一个维度。
如果把面向对象编程比作横向空间,那么面向切面的编程就叫纵向空间,这样真个编程变得多维和立体了。
系统的复用度,会变的更高,冗余(重复)更小,规划的空间更大。
作用
如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话;
那么面向切面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。
面向切面编程,和面向对象编程的互补
面向对象编程主要用于为同一对象层次的公用行为建模。
它的弱点是将公共行为应用于多个无关对象模型之间(不同类的对象,没有继承关系的对象间也有公共属性,公共行为)。
而这恰恰是面向切面编程适合的地方。
有了 AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。

猜你喜欢

转载自blog.csdn.net/xie__jin__cheng/article/details/88422632