java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法

  介绍

这篇文章主要介绍java SpringBoot如何实现自定义注解及自定义解析器对象自动注入的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强> # java-SpringBoot自定义参数解析器实现对象自动注入

解析器逻辑流程图表

癹ava

后台解析注解的解析器

首先,我在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如何实现自定义注解及自定义解析器对象自动注入的方法