介绍
这篇文章主要介绍java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
<强> # java-SpringBoot自定义参数解析器实现对象自动注入强>
解析器逻辑流程图表
后台解析注解的解析器
首先,我在java后台编写了一个解析器,代码如下
进口com.ruoyi.framework.interceptor.annotation.LoginUser; 进口com.ruoyi.project.WebMoudle.WebUser.domain.WebUser; 进口com.ruoyi.project.WebMoudle.WebUser.service.IWebUserService; 进口org.springframework.beans.factory.annotation.Autowired; 进口org.springframework.core.MethodParameter; 进口org.springframework.stereotype.Service; 进口org.springframework.web.bind.support.WebDataBinderFactory; 进口org.springframework.web.context.request.NativeWebRequest; 进口org.springframework.web.context.request.RequestAttributes; 进口org.springframework.web.method.support.HandlerMethodArgumentResolver; 进口org.springframework.web.method.support.ModelAndViewContainer;/* * *有@LoginUser注解的控制方法会进入到解析器中 *通过解析器查询到当前用户,并返回给控制器 * @author yangz */@ service 公共类LoginUserHandlerMethodArgumentResolver实现HandlerMethodArgumentResolver {//用户服务 @ autowired 私人IWebUserService webUserService; @Override 公共布尔supportsParameter (MethodParameter参数){ 返回parameter.getParameterType () .isAssignableFrom (WebUser.class),,parameter.hasParameterAnnotation (LoginUser.class); } @Override 公共对象resolveArgument (MethodParameter参数,ModelAndViewContainer容器, NativeWebRequest请求,WebDataBinderFactory工厂){抛出异常//从请求作用域中获取登录时存入的用户ID、不明白的可以查看我的博客springBoot拦截器一文 对象对象=request.getAttribute (AuthorizationInterceptor。LOGIN_USER_KEY RequestAttributes.SCOPE_REQUEST); 如果(对象==null) { 返回null; }//获取用户信息 长userId=(长)对象; WebUser用户=webUserService.selectWebUserById (userId); 返回用户; } }
其次,我编写一个拦截器配置类,将拦截器注入到春容器中
进口com.ruoyi.framework.interceptor.LoginUserHandlerMethodArgumentResolver; 进口org.springframework.context.annotation.Configuration; 进口org.springframework.web.method.support.HandlerMethodArgumentResolver; 进口org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 进口并不知道; @ configuration 公开课LoginUserConfig延伸WebMvcConfigurerAdapter {/* * *此处获取拦截器实例化对象,同理拦截器 * @return */@ bean 公共LoginUserHandlerMethodArgumentResolver getLoginUserHandlerMethodArgumentResolver () { 返回新LoginUserHandlerMethodArgumentResolver (); } @Override 公共空间addArgumentResolvers (ListargumentResolvers) { super.addArgumentResolvers (argumentResolvers); argumentResolvers.add (getLoginUserHandlerMethodArgumentResolver ()); } }
最后是我们的开关,也就是自定义的注解LoginUser注解,当在控制器方法中参数有使用此注解,就会触发我们的解析器进行对象注入,那么我就得自己定义一个属于自己的注解
进口java.lang.annotation.ElementType; 进口java.lang.annotation.Retention; 进口java.lang.annotation.RetentionPolicy; 进口java.lang.annotation.Target;/* * *注入用户信息注解, *比较简单,没有声明更多的属性 * @author lipengjun * @qq.com 939961241 * @date 2017-03-23 20:39 */@Target (ElementType.PARAMETER) @Retention (RetentionPolicy.RUNTIME) 公共@ interface LoginUser { }
然后就是一小个演示使用的方法
@RequestMapping (value=https://www.yisu.com/zixun//预付) @ResponseBody 公共地图<字符串、对象>预付(@LoginUser WebUser WebUser) {//此间,从请求中获取到userId信息就会在进入控制器之前将webuser对象查出并注入到webuser参数中 }
<>强Springboot基于自定义注解的自动装配强>
1。定义java bean
//@ data lombok注解 公开课用户{ 私人整数标识; 私人字符串的用户名; }java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法