欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何理解AOP面向切面编程

程序员文章站 2022-03-26 21:25:43
开始 今天和大家聊聊AOP:面向切面编程思想。开始聊之前,先和大家一起从编程思想的发展说起。 编程思想的发展历程: 1、POP编程 首先,大家应该都知道,什么是POP编程吧,就是面向过程编程。关于这个编程思想就不做介绍了。 从思维上来讲,面向过程更强调细节,忽视了整体性和边界性。 典型代表是 C/C ......

开始

今天和大家聊聊aop:面向切面编程思想。开始聊之前,先和大家一起从编程思想的发展说起。

编程思想的发展历程:

1、pop编程

首先,大家应该都知道,什么是pop编程吧,就是面向过程编程。关于这个编程思想就不做介绍了。

从思维上来讲,面向过程更强调细节,忽视了整体性和边界性。

典型代表是 c/c++的结构体。

pop的不足:

代码重用性低,不易扩展,维护起来难度大,耦合度比较高。

 

2、oop编程

面向对象编程,把事物对象化,对象包含属性和方法,万物皆对象。

当规模不大,面向过程编程就可以了

最终实现业务,还是得面向过程,按照过程,把业务串起来。 

oop的形式:一个模块由多个类组成,模块又组成某个服务,多个服务组成一个系统

业务变更,需要修改代码,类肯定要发生改变

但是类应该是固定的,不应该频繁被修改,甚至是不允许修改

从而引出了设计模式,就是为了解决这个问题。  

oop的思想,对象组织,是以继承关系为主线,纵向的,有底到高。

oop问题:

1)、共性问题,纵向思维,共性越多,接口就越多

2)、扩展问题,需要对现有的对像动态添加某种行为。

因此,由于oop的问题,从而引出了aop编程

 

3、aop编程

所谓的aop :面向切面编程,它是可以通过预编译的方式和运行期动态实现,在不修改源代码的情况下,给程序动态统一添加功能的技术。

oop是关注将需求功能划分为不同的,相对独立的,封装良好的类,并让他们有自已的行为,依靠继顾,多态来定义彼此的关系。

aop是希望能够将通用功能从不相关的类分离出来,能够使很多类,共享一个行为,这个行为,一旦发生变化,我们只需要修改这个行为就行了,而不需要去修改其他的类。

aop的切面怎么理解呢?

橫切关注点:比如一个电商系统,处理一个订单,需要进行授权认证,订单处理,日志记录。。。更多操作;商品入库,也需要进行授权认证,入库处理,日志记录。。。更多操作。

oop,程序都是通过类和接口组织的,核心业务逻辑采用oop是很合理的。但对于横跨系统中多个模块的功能需求,就比较吃力了,比如日志处理,授权验证,统一的异常处理,性能统计等

而这些都有一个共同点,都是非业务的,非业务的功能代码,从业务代码中抽离出来,独立到非业务的功能代码中,这样我们改变这些行为时,就不会影响现有的业务逻辑代码

简单来说,aop就是将通用功能抽取出来。面向切面,就是关注通用功能,而不关注业务,而我们的oop是关注业务的,这就是它们的区别。

aop实现原理:预先定义一组特性,使它具有拦截方法的功能,执行方法之前和之后做你想要做的事情,而这个的拦截关卡,就是所谓的切面 

过滤器,其实就是aop的一种实现

aop的优势:

1)、将通用功能从业务逻中抽离出来,提高代码的复用性,有利于后期的维护和扩展

2)、在软件设计时,抽出通用功能(抽出切面),降低架构的复杂度,这样在做系统时,只需要完成业务处理功能

 

4、aop和oop的区别:

1)、面向的目标不同:oop面向的是名词领域(商品、对象、类),aop面向的是动词领域(授权、验证、监控、埋点)

2)、思想结构不同:oop是纵向结构,aop是横向结构。

3)、注重的方面不同:oop注重业务逻辑单元的划分;aop偏重业务处理过程中某个步骤或者阶段的行为。

 

5、aop和oop的关系。

aop其实是oop的一个补充,它们都是编程思想,是相互弥补各自的不足,就犹如,oop弥补pop的不足。

核心需求,仍然由oop来实现,具体的业务,由pop来实现。而aop就是为了让oop更专注于业务的逻辑处理,它们都是相辅相成的

 

6、如何在代码里去实现aop

这里就不过多的介绍了,实现在aop的方式有很多种,通过设计模式就可以实现。

装饰器模式:允许向一个对象添加新的功能,同时又不改变其结构。

代理模式:一个类代表别一个类,然后向外界提供功能接口。

过滤器。