AOP编程的基本概念与idea编辑器的配合体验过程

 更新时间:2025年08月16日 10:06:00   作者:RR1335  
文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们如何通过切点表达式(如*、..)关联目标方法(DeptServiceImpl),实现公共逻辑抽取与模块化

初始化一个基础的 AOP 程序

// 作为演示程序,没有更具体的方法体

@Slf4j
@Component
@Aspect
public class TryAspect {

    @Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")      // * 任意方法 , .. 形参任意
    public void before(){
        log.info("Before ...");
    }

    public void after(){
        log.info("After ...");
    }

    public void around(){
        log.info("Around before ...");

        // 调用目标方法


        log.info("around after");
    }

    public void afterReturning(){
        log.info("AfterReturning ...");
    }

    public void afterThrowing(){
        log.info("After Throwing ...");
    }

}

Before

注意编辑器这个位置的 m 的变化。

点击 m 提示了 

@Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") 

切面目标的方法。

Around

before 是半圆;around 是完整的圆形。

同样点击会出现 execution 的指向的目标方法

注解: m = methods

对 around 方法,完善之后

    @Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")
    public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{
        log.info("Around before ...");

        // 调用目标方法
        Object proceed = proceedingjoinPoint.proceed();

        log.info("around after");
        return proceed;
    }

Advise — 通知

方法体,是抽取的一组公共的实现逻辑。

        log.info("Around before ...");

        // 调用目标方法
        Object proceed = proceedingjoinPoint.proceed();

        log.info("around after");
        return proceed;

PointCut — 切入点

方法实际针对的目标方法的引入,是AOP方法和目标类方法的连接;

通过切入点表达式关联。

"execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))"

备注: *  : 所有 DeptServiceImpl 下的方法 ; .. : 形参任意。

Acpect — 切面

advise 和 pointcut 的连接。

    @Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")
    public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{
        log.info("Around before ...");

        // 调用目标方法
        Object proceed = proceedingjoinPoint.proceed();

        log.info("around after");
        return proceed;
    }

描述这个方法的类,就叫: 切面类。

@Slf4j
@Component
@Aspect
public class TryAspect {

    @Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")      // * 任意方法 , .. 形参任意
    public void before(){
        log.info("Before ...");
    }

    public void after(){
        log.info("After ...");
    }

    @Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")
    public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{
        log.info("Around before ...");

        // 调用目标方法
        Object proceed = proceedingjoinPoint.proceed();

        log.info("around after");
        return proceed;
    }

    public void afterReturning(){
        log.info("AfterReturning ...");
    }

    public void afterThrowing(){
        log.info("After Throwing ...");
    }

}

TryAspect —— 切面类。

Target — 目标对象

biz.baijing.service.impl.DeptServiceImpl

DeptServiceImpl —— 就是目标对象。

JoinPoint — 连接点

被 AOP 控制的对象方法,即:

biz.baijing.service.impl.DeptServiceImpl

下的所有方法

这里被 红色 m 标识的方法就是 JoinPoint 。

结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'问题

    解决SpringBoot启动报错:Failed to load property source from l

    这篇文章主要介绍了解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • spring-boot整合dubbo:Spring-boot-dubbo-starter

    spring-boot整合dubbo:Spring-boot-dubbo-starter

    这篇文章主要介绍了spring-boot整合dubbo:Spring-boot-dubbo-starter的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • springboot2 生产部署注意事项及示例代码

    springboot2 生产部署注意事项及示例代码

    这篇文章主要介绍了springboot2 生产部署注意事项及示例代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Java算法之最长公共子序列问题(LCS)实例分析

    Java算法之最长公共子序列问题(LCS)实例分析

    这篇文章主要介绍了Java算法之最长公共子序列问题(LCS),结合实例形式分析了最长公共子序列的原理及问题解决方法,需要的朋友可以参考下
    2017-11-11
  • Java异常之图书管理系统

    Java异常之图书管理系统

    这篇文章主要为大家详细介绍了Java异常之图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 最简单易懂的java数组排序方法整理

    最简单易懂的java数组排序方法整理

    这篇文章主要给大家整理介绍了最简单易懂的java数组排序方法,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 详解Spring Boot中Controller用法

    详解Spring Boot中Controller用法

    Controller是SpringBoot里最基本的组件,他的作用是把用户提交来的请求通过对URL的匹配,分配个不同的接收器,再进行处理,然后向用户返回结果。下面通过本文给大家介绍Spring Boot中Controller用法,需要的朋友参考下
    2017-05-05
  • SpringBoot @Import与@Conditional注解使用详解

    SpringBoot @Import与@Conditional注解使用详解

    在了解spring boot自动配置原理前,再来了解下两个注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean
    2022-10-10
  • Spring中集成Groovy的四种方式(小结)

    Spring中集成Groovy的四种方式(小结)

    这篇文章主要介绍了Spring中集成Groovy的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java实现批量导入.csv文件到mysql数据库

    java实现批量导入.csv文件到mysql数据库

    这篇文章主要为大家详细介绍了java实现批量导入.csv文件到mysql数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论