首先 我们在 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方法
运行结果如下 从输出上看 没有任何 问题