我对AOP(面向切面编程)的理解

来源:互联网 发布:淘宝培训机构 编辑:程序博客网 时间:2024/04/25 06:27

AOPAspect-Oriented Programming,面向切面编程,这个名词这几年非常流行,主要因为它是编程方法上的一个重大突破,或者说是一次巨大创新,当前流行的面向对象编程,通过其封装特性,将同类事物的共同属性和行为封装到一个类中,从而实现抽象对象共同行为的目的,但是当不同模块或不同类的对象具有某一共同的行为,而我们需要对这些对象的共同行为进行统一控制时,面向对象方法就显得无能为力,在AOP没有出现前,我们采取的方法只能是在需要的地方编写重复代码 这样编写程序不利于代码的复用,也不方便对这些共同行为进行控制。

AOP的出现正好解决了这一问题,可以说是面向对象的一个重要的补充。AOP利用其横切技术,剖开那些对象的内部,将那些代表共同行为的代码统一抽取出来,封装到一个可重用模块(最简单的情况也就是一个类,类中封装了那些行为代码)中,这个可重用模块就是“切面”。

这里说的具有共同行为代码,究竟是些什么代码呢?

大家都知道,一个复杂的系统一般可以看成由多个关注点组成的,而一个系统有多个方面的关注点,包括业务逻辑,性能,数据存储,日志信息,异常信息,安全,权限,线程,通信等多方面。但是总的来说,主要可以分为两个方面的关注点,核心关注点和非核心关注点。核心关注点就是系统的核心业务逻辑,这在每个模块都各不相同,都有自己不同的实现,而非核心关注点,像日志信息,权限控制,数据存储等有很多共同之处,这些都可以通过切面编程,这些就是具有共同行为的代码,这些关注点我们常称为横切关注点。

归纳总结一下,可以很清楚什么场合需要面向切面编程(AOP那就是非核心关注点的地方。

总的来说AOP的好处是:

1.   解耦。切面将非业务代码从各模块抽出来,降低了模块间的耦合度。

2.   切面将不同模块共同的与业务无关的代码封装起来,减少了重复代码。

3.    维护方便,将横切关注点统一到一个模块管理,修改更新方便,不影响其他业务模块。

4.    开发分工合作方便,可安排一个人专门复杂横切模块的开发。

5.    节约成本。AOP出现前,需要编写大量重复代码,无论编码和维护都需要付出不少人力成本。