zoukankan      html  css  js  c++  java
  • 【Spring 从0开始】AOP 操作中的相关术语、环境准备

    一、常用术语

    在后续使用 AOP 中会用到几个专业术语:连接点、切入点、通知(增强)、切面。

    分别是什么意思?

    来看这里有个 User 类,里面有增删改查 4 个方法。

    public class User {
        public void add() {}
    
        public void delete() {}
    
        public void update() {}
    
        public void select() {}
    }
    

    以此辅助说明一下上述 4 个术语:

    • 连接点:类中可以被增强的方法,就叫做连接点。比如上面的 4 个方法都可以被增强,都可以称为连接点。
    • 切入点:实际被真正增强的方法,称为切入点。比如上面的 4 个方法,只增强了 add() 方法,这个就是切入点。
    • 通知(增强):实际上增强的逻辑部分,称为通知。比如我给方法增加了日志的输出处理,那这部分逻辑就称为通知或者增强。
    • 切面:把通知(增强)应用到切入点的过程,就叫切面,指的是一个动作。

    其中,关于通知(增强),有 5 种类型:

    • 前置通知:被增强的方法之前执行。
    • 后置通知:被增强的方法之后执行。
    • 环绕通知:被增强的方法前后都执行。
    • 异常通知:被增强的方法出现异常时执行。
    • 最终通知:不管被增强的方法有没有异常都会执行。

    二、准备工作

    Spring 框架一般基于 AspectJ 实现 AOP 操作。

    AspectJ 是一个独立的框架,不是 Spring 的组成部分。为了便捷,把二者结合起来使用。

    那么基于 AspectJ 实现 AOP,可以有 2 种方式:

    • 基于 xml 配置文件
    • 基于注解方式。

    一般为了便捷,使用注解方式。

    1. 引入依赖

    需要 jar 包如下:

    2. 切入点表达式

    作用是:知道要对哪个类里面的哪个方法进行增强。

    结构:

    execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))
    

    比如,我有个类 User 在 package com.pingguo.spring5.dao;里。

    (1)示例1

    我要增强这个类下面的 add() 方法,表达式这么写:

    execution(* com.pingguo.spring5.User.add(..))
    
    • *号:代表所有类型的修饰符。
    • 返回类型:可以不写
    • 类全路径:com.pingguo.spring5
    • 方法:前面加 .add()
    • 参数:括号里的 .. 表示方法中的参数

    (2)示例2

    我要增强这个类下面的所有方法,表达式这么写:

    execution(* com.pingguo.spring5.User.*(..))
    

    这里就是把方法用 * 号替换掉。

    (3)示例3
    我要增强包com.pingguo.spring5下的所有类的所有方法:

    execution(* com.pingguo.spring5.*.*(..))
    

    仍然是用*替换对应的地方。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    java 各个文件夹的含义
    对称加密 & 非对称加密
    leetcode 155 最小栈
    leetcode 53 最大自序列和
    leetcode 146 LRU 缓存机制
    notebook 开启 有限元学习
    leetcode 232 用栈实现队列
    LINUX装机问题:无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端
    JAVA笔记4-static关键字
    C++构造函数、析构函数、虚析构函数
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/15096801.html
Copyright © 2011-2022 走看看