在 spring 引导环境中实现自定义注释

implement custom annotation in spring boot environment

我想在spring引导环境

中创建和实现注释

喜欢下面的代码

@RequestMapping("/test")
    public test (@UserInfo UserDto userDto) {
        Syste.out.println(userDto.getUserId());
}

这是一个例子。我没有所有要求,但我认为这足以帮助您:

@Aspect
@Component
public class AspectConf {

    @Autowired
    private UserService userService;

    @Pointcut("execution(@org.springframework.web.bind.annotation.RequestMapping * *(..))")
    public void requestMappingAnnotatedMethod() {}
    
    @Before("requestMappingAnnotatedMethod()")
    public void beforeAuthorizeMethods(final JoinPoint joinPoint) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        //do something with cookies: request.getCookies();
        
        Object userInfoAnnotatedArgument = getUserInfoAnnotatedParameter(joinPoint);
        if(userInfoAnnotatedArgument != null) {
            ((UserDto)userInfoAnnotatedArgument).setName("xsxsxsxsx");
            //get `userInfo` from `userService` and update `dto`
            ((UserDto)userInfoAnnotatedArgument).setXXX(...);
        }
    }

    private Object getUserInfoAnnotatedParameter(final JoinPoint joinPoint) {
        final MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
        
        Method method = methodSignature.getMethod();
        Object[] arguments = joinPoint.getArgs();
        Parameter[] parameters = method.getParameters();
        for (int i = 0; i < parameters.length; i++) {
            Annotation[] annotations = parameters[i].getAnnotations();
            for (Annotation annotation : annotations) {
                if (annotation.annotationType() == UserInfo.class) {
                    return arguments[i];
                }
            }        
        }
        return null;
    }
}