面向切面编程的介绍,「干货」面向切面编程与装饰器

好评图片 12 0
Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

大家好,今天小编在百度知道关注到一个比较有意思的话题,就是关于面向切面编程的问题,于是小编就整理了3个相关介绍面向切面编程的解答,让我们一起看看吧。

面向切面编程的介绍,「干货」面向切面编程与装饰器

文章目录:

  1. 面向切面编程的介绍
  2. 「干货」面向切面编程与装饰器
  3. 什么是面向切面编程

一、面向切面编程的介绍

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现 类 (StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。宽悉这样的话,假如我们要实现的服务有多个呢?那就要在每个实现模郑的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但却是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。慎码乎AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。

二、「干货」面向切面编程与装饰器

面向切面编程

~~~~ 嗯,百度百科一下 ~~~~

AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个铅举侍重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

话不多说,来个网上的经典例子:

业务逻辑:

主业务:修改数据库

切入点 1:修改前打印日志

切入点 2:修改后打印日志

原理:其实就是将主业务updateDb包裹2次,返回一个新的方法。新方法会在原方法调用前后调用切入方槐吵法,避免在主方法上直接改动。

装饰器 decorator

1 对类的装饰

2 对类的答团方法修饰

class Apes {

@eatMore

eat() {

console.log('吃水果')

}

}

// 修饰方法

function eatMore(className, propName, descriptor) {

//console.log(descriptor)

let value = descriptor.value

descriptor.value = function() {

console.log('吃土')

value()

}

return descriptor

}

let apes1 = new Apes()

apes1.eat()

通过descriptor属性描述符看出 依赖于ES5的Object.defineProperty

复习一下Object.defineProperty

3. 针对 访问操作符的装饰

4. 修饰传参

应用

1. 应用在斐波那契数列计算中

2. 访问操作符-set 上作类型检查

三、什么是面向切面编程

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

“面向切面编程”。只有当你真正的理解OOP之后,才可以理解AOP(面向渗姿切面编程)的思想。

这个思想,不是一两句就能将的明白的。用个生活中的例子:

人的手可以写字,并且可以用很多中笔来写字。例如,钢笔、铅笔、毛笔等等。(这里抽象的说)如果我们要用到人的手写字的时候,就必须提供给手很多中笔,可是每种岩明笔的类型有各自不同,我们说笔有很多不同的属性的功能。如果才能让我们的手丛枣绝拿到任何一种笔都可以写字呢,我们可以这样做。将钢笔、铅笔、毛笔等等笔定义一种公共的“笔”的类型,让我们的手在使用笔的时候,只需要知道要使用一个笔来写字,而不需要关心使用什么笔来写。而决定给这只手用的笔的类型,就是你的事情了。

抽象成简单的代码:

interface Pen{}

class GangBi implements Pen{}

class MaoBi implements Pen{}

class QianBi implements Pen{}

class Human{

void usePen(Pen pen){}

}

这个概念超级抽象。不过,学习Spring框架可以快速的来理解这个概念。

到此,以上就是小编对于面向切面编程的问题就介绍到这了,希望介绍关于面向切面编程的3点解答对大家有用。