BlessingCR’s Blog
BlessingCR’s Blog

AOP

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。

下面我们先看一个 OOP 的例子。

例如:现有三个类,Horse、Pig、Dog,这三个类中都有 eat 和 run 两个方法。

通过 OOP 思想中的继承,我们可以提取出一个 Animal 的父类,然后将 eat 和 run 方法放入父类中,Horse、Pig、Dog通过继承Animal类即可自动获得 eat() 和 run() 方法。这样将会少些很多重复的代码。

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/713ae39a-1583-4db5-a892-10a3217e1e9f/resources/J2LwGaNslCqQDB38O9tFpu_W9X0rL6aKsVrpyRCcIX8.png?token=W.3uQYZvkFKltME5fz9xbVMk41J96SWgICZmQSb_xPpse0cPbjofcm0qg03fTM5Qk

OOP 编程思想可以解决大部分的代码重复问题。但是有一些问题是处理不了的。比如在父类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了。

/**

 * 动物父类

 */

public class Animal {

    /** 身高 */

    private String height;

    /** 体重 */

    private double weight;

    public void eat() {

        // 性能监控代码

        long start = System.currentTimeMillis();

        // 业务逻辑代码

        System.out.println("I can eat...");

        // 性能监控代码

        System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");

    }

    public void run() {

        // 性能监控代码

        long start = System.currentTimeMillis();

        // 业务逻辑代码

        System.out.println("I can run...");

        // 性能监控代码

        System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");

    }

}

这部分重复的代码,一般统称为 横切逻辑代码

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/713ae39a-1583-4db5-a892-10a3217e1e9f/resources/NOFCB3fd6wB4D-_ZOSua_5v5lBduzkD0e-vQ6jejk48.png?token=W.3uQYZvkFKltME5fz9xbVMk41J96SWgICZmQSb_xPpse0cPbjofcm0qg03fTM5Qk

横切逻辑代码存在的问题:

  • 代码重复问题
  • 横切逻辑代码和业务代码混杂在一起,代码臃肿,不变维护

AOP 就是用来解决这些问题的

AOP 另辟蹊径,提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/713ae39a-1583-4db5-a892-10a3217e1e9f/resources/74OkOeJXvu5-jxJV7bU66GjYMALsiai1uHL9EsGb34k.png?token=W.3uQYZvkFKltME5fz9xbVMk41J96SWgICZmQSb_xPpse0cPbjofcm0qg03fTM5Qk

代码拆分比较容易,难的是如何在不改变原有业务逻辑的情况下,悄无声息的将横向逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果。

AOP 解决了什么问题

通过上面的分析可以发现,AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

AOP 为什么叫面向切面编程

 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑

 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念

发表回复

textsms
account_circle
email

  • Hello There. I found your blog the use of msn. This is a very neatly written article. I will make sure to bookmark it and come back to read extra of your useful information. Thanks for the post. I’ll definitely return.

    16 小时前 回复

BlessingCR’s Blog

AOP
AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。 下面我们先看一个 OOP 的例子。 例如:现有三个类,Horse、Pig、Dog,这三个类中都有 ea…
扫描二维码继续阅读
2023-02-21