首先自定义一个注解

//指定注解可以加在哪些地方,METHOD表示只能加载方法上。
@Target(ElementType.METHOD)
//作用是指定注解的生命周期,使其在运行时仍然可用,并可以通过反射获取注解信息
@Retention(RetentionPolicy.RUNTIME)
//定义一个注解 @AutoFill
public @interface AutoFill {

  /* value 是注解的一个属性,OperationType表示value的类型是 OperationType
  使用注解时,必须为 value 属性赋值,value 的值必须是 OperationType 枚举中的某个值
   因为返回值为OperationType 
*/
    OperationType value();
}

定义切面类


@Aspect
@Component
@Slf4j
public class AutoFillAspect {
    //切面=切点+通知
    /*
    * 切入点
    * */
    @Pointcut("execution(* com.huang.mapper.*.*(..)) && @annotation(com.huang.annotation.AutoFill)")
    public void autoFillPointCut(){
    }
    // 前置通知,在通知中进行公共字段的赋值
    //这里也可以直接写切点表达式,不用Pointcut
    @Before("autoFillPointCut()")
/*joinPoint用于表示在程序执行过程中某个连接点(Join Point)的上下文信息。它通常在切面方法中作为参数,用于获取方法的相关信息,如目标方法、参数、类、返回值等。*/
    public void autoFill(JoinPoint joinPoint){
            log.info("开始进行公共字段自动填充");
    }
}

在方法上面使用注解

@AutoFill(OperationType.UPDATE)
void update(Employee employee);

使用什么通知,要看方法代码执行的时机与通知执行的先后顺序,如果,在注解标注的方法执行前就用前置通知,如果在方法执行之后就用后置通知。

Categories:

Tags:

暂时没有回复

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注