spring-aop

发布时间 2023-09-14 21:24:38作者: 微风抚秀发

即面向切面编程 在oop的基础上横切 加入一些非核心代码

切面类使用步骤如下

  1. 定义 方法 存储增强代码 具体定义几个 由插入位置决定
  2. 使用注解配置 指定插入 目标方法的位置
    * 前置 @Before
    * 返回 @AfterReturning
    * 异常 @AfterThrowing
    * 后置 @After
    * 环绕 @Around
  3. 配置切点表达式 【选中插入的方法 切点 指明切入哪里】
  4. 补全注解
    * 加入 ioc 容器 @Component
    * 配置切面 @Aspect =切点 + 增强的部分
  5. 开启 @Aspect 注解 的支持 在配置类加入注解

//四.配置切面
@Aspect 
@Component
@Order(10) //设置切面优先级  数越小 优先级越高
public class LogAdvice {

    // 二.使用注解配置 指定插入 目标方法的位置 (前置增强)
    @Before("execution(* com..impl.*.*(..))") //三.配置切点表达式 (声明在哪些方法中生效)
    //一.定义方法
    public void before(JoinPoint joinPoint) {
        System.out.println("开始了");
       /*
      joinPoint.getSignature().getName();获取方法名
        int modifiers = joinPoint.getSignature().getModifiers();访问修饰符
        Modifier.toString(modifiers); 访问修饰符  数字转字符串
        joinPoint.getTarget().getClass().getSimpleName();  获得对象 -->类对象 --> 简单类名
        joinPoint.getArgs(); 参数列表
*/
    }

    //后置增强
    @AfterReturning(value = "execution(* com..impl.*.*(..))",returning ="result")  //返回的结果
    // 如果想要 获得 返回结果
    // 1.在方法中 加参数    (Object result) 接收返回结果
    // 2.在注解中加入returning 属性( returning ="result" 指定用那个形参 来接收 返回结果)
    public void returnResult(Object result) {
    }

    //最后增强
    @After("execution(* com..impl.*.*(..))")
    public void after() {
        System.out.println("结束了");
    }

    //异常增强
    @AfterThrowing(value = "execution(* com..impl.*.*(..))",throwing = "throwable")   //异常信息
    public void err(Throwable throwable) {
        System.out.println("出错了");
    }
}