美文网首页
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