【发布时间】:2018-09-01 17:51:27
【问题描述】:
@RestController
public class TestController {
@GetMapping("/hello/{userId}")
@Audit(type = AuditType.CREATE)
public String hello(@AuditField @PathVariable long userId) {
return "hello";
}
}
我想扫描 @Audit 注释和 @AuditField。 @Audit 扫描工作正常,但我也想获取 @AuditField 参数值。在我的例子中 userId。
我已经为 @AfterReturning 建议定义了 Aspect。
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AuditAspect {
@AfterReturning(pointcut = "@annotation(audit)", returning = "result")
public void audit(JoinPoint jp, Object result, Audit audit) throws Exception {
List<Object> auditFields = getAuditData(jp.getArgs());
System.out.println(auditFields);
}
private List<Object> getAuditData(Object[] args) {
return Arrays.stream(args)
.filter(arg -> arg instanceof AuditField)
.collect(Collectors.toList());
}
}
但是在访问 hello/1 时,auditFields 显示为空。
【问题讨论】:
标签: java annotations spring-aop