五、面向切面:AOP
AOP:指不改变源代码的情况下增强功能或方法
5.1 场景模拟
写一个计算器
搭建子模块:spring6-aop
5.1.1 声明接口
声明计算器接口 Calculator ,包含加减乘除的抽象方法
Calculator.java
java
package com.atguigu.example;
public interface Calculator {
//加
int add(int i, int j);
//减
int sub(int i, int j);
//乘
int mul(int i, int j);
//除
int div(int i, int j);
}
5.1.2 创建实现类
CalculatorImpl.java
java
package com.atguigu.example;
//基本实现类
public class CalculatorImpl implements Calculator {
@Override
public int add(int i, int j) {
int result = i+j;
System.out.println("方法内部 result = " + result);
return result;
}
@Override
public int sub(int i, int j) {
int result = i-j;
System.out.println("方法内部 result = " + result);
return result;
}
@Override
public int mul(int i, int j) {
int result = i*j;
System.out.println("方法内部 result = " + result);
return result;
}
@Override
public int div(int i, int j) {
int result = i/j;
System.out.println("方法内部 result = " + result);
return result;
}
}
5.1.3 创建带日志功能的实现类
CalculatorLogImpl.java
java
package com.atguigu.example;
//带日志的实现类
public class CalculatorLogImpl implements Calculator{
@Override
public int add(int i, int j) {
System.out.println("[日志] add 方法开始了,参数是:" + i + "," + j);
int result = i+j;
System.out.println("方法内部 result = " + result);
System.out.println("[日志] add 方法结束了,结构是:" + result);
return result;
}
@Override
public int sub(int i, int j) {
System.out.println("[日志] sub 方法开始了,参数是:" + i + "," + j);
int result = i-j;
System.out.println("方法内部 result = " + result);
System.out.println("[日志] sub 方法结束了,结构是:" + result);
return result;
}
@Override
public int mul(int i, int j) {
System.out.println("[日志] mul 方法开始了,参数是:" + i + "," + j);
int result = i*j;
System.out.println("方法内部 result = " + result);
System.out.println("[日志] mul 方法结束了,结构是:" + result);
return result;
}
@Override
public int div(int i, int j) {
System.out.println("[日志] div 方法开始了,参数是:" + i + "," + j);
int result = i/j;
System.out.println("方法内部 result = " + result);
System.out.println("[日志] div 方法结束了,结构是:" + result);
return result;
}
}
5.1.4 提出问题
5.2 代理模式
5.2.1 概念
5.2.2 静态代理
5.2.3 动态代理
5.2.4 测试
5.3 AOP 概念及相关术语
AOP 的底层用到了动态代理