面向切面编程 (AOP )

什么是面向切面编程?

  面向切面编程就是(AOP --- aspect-oriented programming), 在百科上说: 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容, 是函数式编程的一种衍生范型。 

为什么要面向切面编程?

  利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

  在代码运行时,动态的将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。

 

面向切面编程举例?

  比方说你在做一个学校系统,你的系统里有一些功能模块,比如给老师用的TeacherService, 给学生用的StudentService,记录课程用的CourseService。 作为一个系统,还有一些模块是上面的所有功能模块都需要的,比如记录系统状态的LoggingServer,保证系统安全的 SecurityServer, 这些公用模块如果你在Teacher、Student、Course等功能模块中分别写一遍,会造成代码重复,也增加了模块家的偶。 

  简单的说,AOP就是将这些公用的模块独立出来,这些公用模块就是切面,aspect。 

    

面向切面编程(AOP)和面向对象编程的比较(优缺点)。 

作者:欲眼熊猫
链接:https://www.zhihu.com/question/24863332/answer/48376158
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。



可以看出AOP和OOP并不是对立的,前者是后者的补充,面向切面编程一方面提高了代码的可重用性,另一方面因为其动态切入的方式,所以也没有出现对象间耦合的关系。  这就是面向切面编程。  注意理解切面、切入点等基本概念。

我举个例子吧,不大擅长讲理论的东西 你的程序写好了 现在发现要针对所有业务操作添加一个日志,或者在前面加一道权限控制,怎么办呢? 传统的做法是,改造每个业务方法 这样势必把代码弄得一团糟 而且以后再扩展还是更乱 aop的思想是引导你从另一个切面来看待和插入这些工作 日志,不管加在哪,它其实都是属于日志系统这个角度的 权限控制也一样 aop允许你以一种统一的方式在运行时期在想要的地方插入这些逻辑

  从这里可看出,通过AOP可以提高代码的重用,并且动态的插入是非常优秀的一种做法。

原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6943086.html