美文网首页
5 Spring 中的注解使用

5 Spring 中的注解使用

作者: 光小月 | 来源:发表于2019-06-26 17:58 被阅读0次

    在spring 中,其注解永远都是可以直接使用,不用管实现过程,因为他后台有个接口HandlerMethodArgumentResolver, 该接口可以处理methodParameter参数,在参数中可以spring web 容器自动解决参数, 相对比我写的注解利用注解解决字段中文显示问题, 其实处理过程都是一致的。

    在spring boot 项目中可以动态获取登录用户

    注解@CurrUserIfPresent

    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface CurrUserIfPresent{
    }
    
    

    注解的处理器 CurrentUserIfPresentMethodArgumentResolver

     import org.springframework.core.MethodParameter;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.context.request.ServletWebRequest;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    
    
    @Component
    public class CurrentUserIfPresentMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return parameter.getParameterType().isAssignableFrom(String.class) && parameter.hasParameterAnnotation(CurrUserIfPresent.class);
        }
    
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
            return ((ServletWebRequest) webRequest).getRequest().getHeader("username");
        }
    }
    

    spring 容器自动会将登录用户赋予 参数对象中
    比如:
    public String sayHello(@CurrUserIfPresentString username) {...}
    该方法会自动将用户赋予username值

    PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”一下,就此谢过!

    相关文章

      网友评论

          本文标题:5 Spring 中的注解使用

          本文链接:https://www.haomeiwen.com/subject/uclhcctx.html