springAOP及自定义注解

1.自定义注解FlowTaskPersonRecord

package com.taihang.flow.business.annotation;

import java.lang.annotation.*;

/**
 * @author wangtw
 * @date 2022/1/19 9:59
 * @description 自定义注解
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FlowTaskPersonRecord {

	/**
	 * 类对象
	 */
	Class group();

	/**
	 * 属性值
	 */
	String[] prop();
}

2.定义切面

package com.taihang.flow.business.aspect;

import com.taihang.flow.business.annotation.FlowTaskPersonRecord;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * @author wangtw
 * @date 2022/1/19 10:33
 * @description 切面类
 */
@Aspect
@Component
@Slf4j
public class FlowTaskPersonRecordAspect {

	@Pointcut("@annotation(com.taihang.flow.business.annotation.FlowTaskPersonRecord)")
	public void pointcutAnnotation() {}

	/**
	 * 后置通知
	 */
	@After(value = "pointcutAnnotation()")
	public void methodAfter(JoinPoint joinPoint) {
		//获取自定义注解属性值
		Signature signature = joinPoint.getSignature();
		MethodSignature methodSignature = (MethodSignature) signature;
		Method method = methodSignature.getMethod();
		FlowTaskPersonRecord TaskPersonAnnotation = method.getAnnotation(FlowTaskPersonRecord.class);
		for (String s : TaskPersonAnnotation.prop()) {
			System.out.println(s);
		}
		System.out.println(TaskPersonAnnotation.group());
		
		//获取方法参数
		for (Object arg : joinPoint.getArgs()) {
			System.out.println(arg);
		}
	}
}


版权声明:本文为qq_39464523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。