栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot实现AOP详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot实现AOP详解

SpringBoot实现AOP详解 1. Spring框架实现AOP
  • 首先我们知道
  • Aspect(切面) === Advice(通知) + PointCut(切入点)
  • Advice(通知): 业务逻辑中一些附加操作称之为通知,可分为前置,后置,环绕,异常,最终。
  • PointCut(切入点):配置通知应用于项目中的具体哪些操作
1.1 类 implement xxAdvice接口 1.2 xml进行配置

    
    
    
    

2. SpringBoot配置AOP的方式 2.1  主要是对现有的spring框架进行封装
  • 无xml配置,一切都是java进行配置

  • AOP:面向切面

  • Aspect(切面) === Advice(通知) + PointCut(切入点)

  • 所以仍要需要做的两件事:

    • 开发附加操作(通知)Advice
    • 配置切入点 &组装切面
2.2 面向切面编程的步骤
  • 引入aop切面的编程依赖

    org.springframework.boot
    spring-boot-starter-aop

  • 在SpringBoot中新建MyAdviceConfig配置类
package com.liu.aop.config;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Configuration;


// 表示当前的类是一个配置类
@Configuration
//该注解只能用在类上,作用:代表当前类是一个切面类,等价于spring.xml中的标签
//所以现在有了切面,还需要  通知 + 切入点
// 切面 == 通知 + 切面
@Aspect
public class MyAdviceConfig {

    
    // 方法级别:具体到某个具体的方法
    // @Before(value = "execution(* com.liu.aop.service.impl.*.*(..))")
    // 表示service包下的所有类所有方法都执行该前置通知
    @Before(value = "within(com.liu.aop.service.*)")
    public void before(JoinPoint joinPoint) {
        System.out.println("before开始执行查询.......");
        System.out.println("正在执行的目标类是: " + joinPoint.getTarget());
        System.out.println("正在执行的目标方法是: " + joinPoint.getSignature().getName());
    }

    
    @After(value = "execution(* com.liu.aop.service.impl.*.*(..))")
    public void after(JoinPoint joinPoint) {
        System.out.println("after查询结束.......");
        // 获取执行目标类和方法名等等
    }

    
    @Around(value = "execution(* com.liu.aop.service.impl.*.*(..))")
    public Object aroud(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("aroud环绕通知开始.......");
        System.out.println("执行的目标类 = " + proceedingJoinPoint.getTarget());
        System.out.println("执行的目标方法 = " + proceedingJoinPoint.getSignature().getName());
        // 必须方法目标方法
        Object proceed = proceedingJoinPoint.proceed();
        System.out.println("aroud环绕通知结束.......");
        // 将目标方法的返回值进行返回,否则调用目标方法的方法无法获取到返回值
        return proceed;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号