java springboot中使用 AOP监听方法执行周期

首先 我们在 pom.xml 中 dependencies标签中加入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

然后 我们随便创建一个类
编写代码如下

package com.example.webdom.domain;

import org.springframework.stereotype.Component;

@Component
public class user {
    public void add(){
        System.out.println("add......");
    }
}

user 就是个普通的类 其中 有两个点 首先 要写一个方法 给我们的aop监听 这里我写了个add内容也是随便写了两下 然后要声明Component 让全局扫描能拿到你这个类

然后 我们在 config目录 如果没有 config 就创建一个 下面创建一个配置类 这里就叫 MyAspect 吧
参考代码如下

package com.example.webdom.config;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAspect {
    // 定义切点
    @Pointcut("execution(* com.example.webdom.domain.user.add(..))")
    public void serviceMethods() {
        System.out.println("aop监听到了");
    }

    // 定义通知
    @Before("serviceMethods()")
    public void beforeAdvice(JoinPoint joinPoint) {
        // 在目标方法执行前执行的逻辑
        System.out.println("Before method: " + joinPoint.getSignature().getName());
    }
}

在这里插入图片描述
之前 我们也讲过aop的五大通知类型

@Before注解标注的方法 会在指向的方法执行前执行
@After注解标注的方法 会在指向的方法执行结束后执行
@AfterReturning标注的方法 也是在被标注的方法结束执行 但他与After的不同在于 他是等被指定方法给出返回值后执行 但如果你的方法没有返回值 他也会走的
@AfterThrowing注解标注的方法 会在指定方法发生异常时执行
@Around标注的方法 相对特殊一点 这个叫环绕通知 在方法执行前和执行后 都会执行 但执行的片段不一样
他接收一个ProceedingJoinPoint 类型的对象参数 对象中有一个proceed函数 需要在方法中调用
写在调用proceed前的代码 会在指定方法前执行 而在proceed后面的则反过来 会在指定方法执行后执行

这里 我们绑定了Before 会在add函数执行前执行
然后 这里 我们写了整个路径 com.example.webdom.domain.user.add 这个不用担心 只要没报错 就是对的路径

然后 我们找个地方去用一下它
在这里插入图片描述
这到没什么讲究 的 就是随便找个地方 条件装配一下 user类 然后调用一下它的 add方法

运行结果如下 从输出上看 没有任何 问题
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot使用AOP监听注解可以通过以下步骤实现: 1. 在`pom.xml`文件添加`spring-boot-starter-aop`依赖,以使用Spring AOP。 2. 创建一个注解类,例如`@MyAnnotation`,用于标记需要被监听方法。 3. 创建一个切面类,用于监听被`@MyAnnotation`标记的方法。可以使用`@Aspect`注解来标记这个类。 4. 在切面类定义一个切点,用于匹配被`@MyAnnotation`标记的方法。可以使用`@Pointcut`注解来定义切点。 5. 在切面类定义一个通知,用于在匹配到切点时执行某些操作。可以使用`@Before`、`@After`、`@Around`等注解来定义通知。 6. 在Spring Boot应用程序的主类添加`@EnableAspectJAutoProxy`注解,以启用AOP功能。 以下是一个示例代码: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { } @Aspect @Component public class MyAspect { @Pointcut("@annotation(com.example.demo.MyAnnotation)") public void myAnnotationPointcut() {} @Before("myAnnotationPointcut()") public void beforeMyAnnotation() { System.out.println("Before My Annotation"); } } @EnableAspectJAutoProxy @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 在上面的示例,`@MyAnnotation`注解用于标记需要被监听方法,在`MyAspect`切面类定义了一个切点`myAnnotationPointcut`,用于匹配被`@MyAnnotation`标记的方法,在`beforeMyAnnotation`方法定义了一个前置通知,在匹配到切点时执行。在`DemoApplication`主类添加了`@EnableAspectJAutoProxy`注解,以启用AOP功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值