Spring6笔记(三):面向切面AOP和单元测试Junit

五、面向切面: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 的底层用到了动态代理

5.3.1 概述

5.3.2 相关术语

5.3.3 作用

5.4 基于注解的AOP

5.4.1 技术说明

5.4.2 准备工作

5.4.3 创建切面类并配置

5.4.4 各种通知

5.4.5 切入点表达式语法

5.4.6 重用切入点表达式

5.4.7 获取通知的相关信息

5.4.8 环绕通知

5.4.9 切面的优先级

5.5 基于 XML 的AOP

六、单元测试:JUnit

6.1 整合JUnit5

6.2 整合JUnit4

相关推荐
by209992 小时前
学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
c++·笔记·字符串·类和对象·string
笑鸿的学习笔记3 小时前
C++笔记之大块顺序写
java·c++·笔记
山岚的运维笔记5 小时前
ComfyUI NVIDIA安装教程:官方便携版下载+run_nvidia_gpu.bat启动,8G显存Windows实操
运维·服务器·windows·笔记·prompt·aigc·comfyui
知潮网7 小时前
手机号注销两年,免密扣款仍在继续
笔记
Seraphina367 小时前
DVWA(SQL注入-low,medium,XSS反射-low)
前端·数据库·笔记·sql·网络安全·web·xss
维克兜率天9 小时前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
路弥行至10 小时前
【Head First 设计模式】第 2 章:观察者模式 —— 用现代 C++ 重新解读“交互对象的松耦合
c++·经验分享·笔记·观察者模式·设计模式·入门教程·headfirst
坤坤子吖12 小时前
Python基础语法学习:条件、循环与程序控制
开发语言·笔记·python·学习
远离UE412 小时前
UE5.8 Substrate Glint 笔记
笔记
用户140360581938312 小时前
Phase A · Step 3:模型导出 ONNX
笔记