Java 注解Annotation总结二
一、简介
上篇文章主要介绍了注解的概念以及怎么自定义一些注解,本文将通过SpringBoot中实现获取当前登录用户的自定义注解示例,进一步熟悉自定义注解的实际应用场景。
二、实现思路
【a】定义用户实体类User:
public class User implements Serializable {private String loginId;private String name;public User(String loginId, String name) {this.loginId = loginId;this.name = name;}public String getLoginId() {return loginId;}public void setLoginId(String loginId) {this.loginId = loginId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
【b】自定义注解CurrentLoginUser:
/*** @Description: 当前登录用户自定义注解* @Auther: weishihuai* @Date: 2018/12/19 10:32* 说明: 在web端controller接口中,可以通过注入该注解,获取到当前登录的用户信息*/@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentLoginUser {String value() default "";
}
【c】自定义参数解析器:
/*** @Description: @CurrentLoginUser注解解析器* @Auther: weishihuai* @Date: 2018/12/19 10:36* 说明: 自定义参数解析器*/
public class CurrentLoginUserMethodArgumentResolver implements HandlerMethodArgumentResolver {public CurrentLoginUserMethodArgumentResolver() {}/*** 用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument.** @param methodParameter 方法参数* @return*/@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {//如果方法参数上面有@CurrentLoginUser注解,返回true,并且执行下面的resolveArgument()解析参数的方法,如果不存在该注解返回false,不会执行resolveArgument()方法return methodParameter.hasParameterAnnotation(CurrentLoginUser.class);}/*** 真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象.** @param methodParameter 方法参数* @param modelAndViewContainer* @param nativeWebRequest* @param webDataBinderFactory* @return 自定义注解参数的值* @throws Exception*/@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
// 获取当前登录的用户信息(可以同时返回登录用户所有的权限或者角色信息)
// Object principal = SecurityUtils.getSubject().getPrincipal();
// if (null != principal && principal instanceof RbacUserInfoProtocol){
// return principal;
// }//获取当前登录用户的逻辑处理//这里只是模拟简单的返回当前登录用户return new User("admin", "zhangsan");}
}
【d】 配置自定义参数解析器
/*** @Description: 配置自定义参数解析器* @Auther: weishihuai* @Date: 2018/12/19 10:52*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {@Beanpublic CurrentLoginUserMethodArgumentResolver currentLoginUserMethodArgumentResolver() {return new CurrentLoginUserMethodArgumentResolver();}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {//添加@CurrentLoginUser方法注解的解析处理argumentResolvers.add(currentLoginUserMethodArgumentResolver());super.addArgumentResolvers(argumentResolvers);}
}
【e】测试
@RequestMapping("/testLoginUser")public void testLoginUser(@CurrentLoginUser User user) {System.out.println("TestController.testLoginUser-->loginId-->" + user.getLoginId() + "-->name-->" + user.getName());}
启动项目:
如图,可以看到,当前登录用户的值都注入到@CurrentLoginUser注解中了,可以在Controller中注解拿出当前登录用户的信息,避免频繁调用获取当前用户信息的方法,比较简便。
三、总结
以上就是关于在SpringBoot中使用自定义注解获取当前登录用户的示例,仅供大家学习参考,希望对大家的学习有所帮助。
Java 注解Annotation总结二相关推荐
- Java 注解(Annotation)使用方法归纳
Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...
- Java注解(Annotation)详解
转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...
- Java注解Annotation 完成验证
Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性. 这篇文章将 ...
- java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.注解可以看作是一种特殊的标记,在程序在编译或 ...
- java 注解: Annotation
java 注解: Annotation 普通注解 自定义注解 元注解 注解: 位于源码中,用来修饰程序的元素,但不会对被修饰的对象有直接的影响. 可增加程序的动态性. 普通注解 普通注解:为java代 ...
- Java注解annotation invalid type of annotation member
文章目录 Java注解annotation : invalid type of annotation member 1.什么是invalid type of annotation member 2.哪 ...
- 深入JAVA注解(Annotation):自定义注解
一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解 ...
- Java注解Annotation的用法 - 自定义Annotation实现
Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...
- 深入理解Java注解Annotation之注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- 深入理解Java注解Annotation及自定义注解
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...
最新文章
- 【Java】排序算法 之 【快速排序】 总结
- spring InitializingBean接口分析
- [备忘][转载]apache 403错误 You don't have permission to access on this server
- UILable的text设置中划线(删除线)
- struts2 的form 标签theme属性
- ransac剔除误匹配matlab代码,基于APAP图像拼接算法的改进
- 基于mcat开发以太坊智能合约
- ITK:多相Chan和Vese稀疏场水平集分割
- 作家百态之二:山南海北
- mysql瓶颈分析_网站瓶颈分析—MYSQL性能分析
- 解决不产生nohup.out文件方法
- 【Java】关于Java的一些基础知识点
- DG Lecture 2 part 1: points, vectors, directional derivative
- 2018--Linux面试题
- MyBatis---动态SQL
- 接口自动化测试框架搭建(9、自动化测试case的编写)--python+HTMLTestRunnerCN+request+unittest+mock+db
- CentOS 5.11下Oracle 11G R2 Dataguard搭建
- MATLAB —— 散点图绘制
- java调用萤石对讲_海康萤石摄像头SDK Java(一)java本地调用摄像头
- 国家语言代码大全【方便翻译查询】
热门文章
- Spark中的python shell交互界面Ipython和jupyter notebook
- 容器技术Docker K8s 27 容器服务ACK基础与进阶-监控管理
- centos6配置mysql5.7_CentOS 6.7 下 MYSQL 5.7 的安装与配置
- python正则表达式提取c语言中的函数,Python正则表达式匹配C语言函数
- Kaggle酒推荐,winemag-data-130k-v2.csv
- 146.LRU缓存机制
- 8. 字符串转整数 (atoi)
- 什么是document对象?如何获取文档对象上的元素?_JavaScript DOM操作元素的方法,你还记得多少?...
- 麻省理工线性代数第二讲
- 现代通信原理A.3:随机信号的功率谱估计