首先自定义一个注解
//指定注解可以加在哪些地方,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);
使用什么通知,要看方法代码执行的时机与通知执行的先后顺序,如果,在注解标注的方法执行前就用前置通知,如果在方法执行之后就用后置通知。
暂时没有回复