什么是AOP

AOP,全称为面向切面编程(Aspect-Oriented Programming),是一种在程序运行期间动态插入特定代码的方法。这种编程方式允许将额外的功能(如日志记录)与核心业务逻辑分开,提升代码的可维护性和可读性。

示例:计算器功能与日志记录

以下是一个简单的计算器接口,包含基本的数学运算方法:

java
1 2 3 4 5 6
public interface Calculate {
    int add(int num1, int num2);
    int mul(int num1, int num2);
    int div(int num1, int num2);
    int sub(int num1, int num2);
}

接下来是实现该接口的 Calculator 类,其中每个方法都会在执行前打印日志:

java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
public class Calculator implements Calculate {
    public int add(int num1, int num2) {
        System.out.println("日记:【add】方法调用前。参数1是:" + num1 + ",参数2是:" + num2);
        return num1 + num2;
    }

    public int mul(int num1, int num2) {
        System.out.println("日记:【mul】方法调用前。参数1是:" + num1 + ",参数2是:" + num2);
        return num1 * num2;
    }

    public int div(int num1, int num2) {
        System.out.println("日记:【div】方法调用前。参数1是:" + num1 + ",参数2是:" + num2);
        return num1 / num2;
    }

    public int sub(int num1, int num2) {
        System.out.println("日记:【sub】方法调用前。参数1是:" + num1 + ",参数2是:" + num2);
        return num1 - num2;
    }
}

接下来是用于测试的代码:

java
1 2 3 4 5 6 7 8 9 10
public class CalculatorTest {
    public static void main(String[] args) {
        Calculate calculate = new Calculator();
        int result = calculate.add(1212, 1212);
        System.out.println("相加的结果:" + result);
        
        result = calculate.mul(1212, 1212);
        System.out.println("相乘的结果:" + result);
    }
}

在上述实现中,日志记录代码被直接嵌入到业务方法中,这导致业务逻辑与日志记录耦合在一起。若将来需要修改日志记录的实现,则必须在每个方法中手动更改,这会增加维护的复杂性。因此,这是一种不太理想的做法。

通过AOP,我们可以将日志记录逻辑与业务代码分离,使得代码更加清晰易维护。