- 在pom.xml中添加依赖
- <!--aop依赖-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-aop</artifactId>
- </dependency>
- 自定义注解,后面直接通过在方法上加注解即可,在cxsbg包下新建aop包,在aop包中添加InvokeLog注解
- package com.cxsbg.aop;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Target(ElementType.METHOD) //注解用到的地方,比如注解用在方法上
- @Retention(RetentionPolicy.RUNTIME) //注解在什么时候,比如runntime
- public @interface InvokeLog {
- }
- 定义切面类,首先要定义切点,承载刚定义的注解,然后定义增前方法
- package com.cxsbg.aop;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.Signature;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Pointcut;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.springframework.stereotype.Component;
- @Aspect //标识这是一个切面类
- @Component
- public class InvokeLogAspect {
- //确定切点,承载注解,即哪些注解用到这个切面类
- @Pointcut("@annotation(com.cxsbg.aop.InvokeLog)")
- public void pt(){}
- //通知方法
- @Around("pt()") //加了InvokeLog注解的方法都会调用该方法
- //参数joinPoint表示正在运行中的被增强的方法
- public Object printInvokeLog(ProceedingJoinPoint joinPoint) {
- //目标方法调用前
- System.out.println();
- MethodSignature signature = (MethodSignature) joinPoint.getSignature();
- String methodName = signature.getMethod().getName();
- System.out.println(methodName + "即将被调用");
- Object proceed = null;
- try {
- proceed = joinPoint.proceed();
- //目标方法调用后
- System.out.println(methodName + "调用结束");
- } catch (Throwable e) {
- e.printStackTrace();
- //目标方法调用出现异常
- System.out.println(methodName + "出现异常");
- }
- return proceed;
- }
- }
- 在方法上加上该注解
- @Override
- @InvokeLog //需要被增强的方法加上对应的注解
- public List<User> findAll() {
- return userMapper.findAll();
- }