在springboot中使用注解将值注入参数的操作

 更新时间:2020年04月26日 10:10:15   作者:一条独立特行的咸鱼  
这篇文章主要介绍了在springboot中使用注解将值注入参数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息。可以把获取在shiro中的登陆者信息封装在一个类中,使用时获取。本文主要讲述如何使用注解将值注入参数,shiro的配置请自行百度。

定义注解

新建一个InfoAnnotation.java的注解类,用于注解参数,代码如下:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface InfoAnnotation {
 String value() default "userId";//默认获取userId的值
}

定义注解处理类

新建一个InfoResolver类,AOP无法将值注入参数,需要继承HandlerMethodArgumentResolver类,代码如下:

public class InfoResolver implements HandlerMethodArgumentResolver {
 //使用自定义的注解
 @Override
 public boolean supportsParameter(MethodParameter methodParameter) {
 return methodParameter.hasParameterAnnotation(InfoAnnotation.class);
 }

 //将值注入参数
 @Override
 public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
 //获取捕获到的注解
 InfoAnnotation annotation = methodParameter.getParameterAnnotation(InfoAnnotation.class);
 String value = annotation.value();
 //获取需要注入值得逻辑
 //该例子在shiro中获取userId或者用户信息
 if (value == null || "".equalsIgnoreCase(value) || value.equalsIgnoreCase("userId")){
  User user = (User)SecurityUtils.getSubject().getSession().getAttribute("user");
  if (user == null){
  return 1;
  }
  return user.getId();
 } else if ("user".equalsIgnoreCase(value)){
  return SecurityUtils.getSubject().getSession().getAttribute("user");
 }
 return value;
 }
}

使springboot支持该拦截器

修改启动类,继承WebMvcConfigurationSupport类,添加自定义得拦截器,代码如下:

@SpringBootApplication
public class DemoApplication extends WebMvcConfigurationSupport {
 public static void main(String[] args) {
 SpringApplication.run(DemoApplication.class, args);
 }
 //添加自定义的拦截器
 @Override
 public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers){
 super.addArgumentResolvers(argumentResolvers);
 argumentResolvers.add(new InfoResolver());
 }
}

测试

测试用例,如下代码

@GetMapping
public BaseResponse<?> test(@InfoAnnotation int userId){
 return ResponseUtil.successResponse(userId);
}

登陆返回的信息

调用测试用例返回的信息

可以看到登陆返回的用户信息的id和测试用例返回的data一致。

以上这篇在springboot中使用注解将值注入参数的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java IO流学习总结之文件传输基础

    Java IO流学习总结之文件传输基础

    这篇文章主要介绍了Java IO流学习总结之文件传输基础,文中有非常详细的代码示例,对正在学习java io流的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • 多数据源如何实现事务管理

    多数据源如何实现事务管理

    Spring中涉及三个核心事务处理接口:PlatformTransactionManager、TransactionDefinition和TransactionStatus,PlatformTransactionManager提供事务操作的基本方法,如获取事务、提交和回滚
    2024-09-09
  • Java模拟死锁发生之演绎哲学家进餐问题案例详解

    Java模拟死锁发生之演绎哲学家进餐问题案例详解

    这篇文章主要介绍了Java模拟死锁发生之演绎哲学家进餐问题,结合具体演绎哲学家进餐问题的案例形式详细分析了死锁机制与原理,需要的朋友可以参考下
    2019-10-10
  • Mybatis批量插入返回成功的数目实例

    Mybatis批量插入返回成功的数目实例

    这篇文章主要介绍了Mybatis批量插入返回成功的数目实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java中关于二叉树的概念以及搜索二叉树详解

    Java中关于二叉树的概念以及搜索二叉树详解

    二叉树是一种很有用的非线性结构,日常的开发中常会用到,关于二叉树的概念以及搜索二叉树本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java httpClient连接池支持多线程高并发的实现

    Java httpClient连接池支持多线程高并发的实现

    本文主要介绍了Java httpClient连接池支持多线程高并发的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Boot之AOP配自定义注解的最佳实践过程

    Spring Boot之AOP配自定义注解的最佳实践过程

    这篇文章主要给大家介绍了关于Spring Boot之AOP配自定义注解的最佳实践过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 详解Java8新特性如何防止空指针异常

    详解Java8新特性如何防止空指针异常

    要说 Java 编程中哪个异常是你印象最深刻的,那 NullPointerException 空指针可以说是臭名昭著的,不要说初级程序员会碰到, 即使是中级,专家级程序员稍不留神,就会掉入这个坑里,本文就和大家聊聊Java8新特性如何防止空指针异常
    2023-08-08
  • Java代理模式实例分析

    Java代理模式实例分析

    这篇文章主要介绍了Java代理模式,结合实例形式对比分析了java代理模式的使用方法与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Spring Security 安全框架应用原理解析

    Spring Security 安全框架应用原理解析

    这篇文章主要介绍了Spring Security 安全框架应用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论