java 通过反射将userId转userName
大家好,我是鱼尾~,本期带大家了解java的反射机制,以及我所使用到的业务场景
反射是框架设计的灵魂
(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)
反射的概述
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
业务场景
在数据库设计中,在表的设计上,通常会有一些基础、常用的字段,例如createBy(创建人),update(修改人)等等,在数据库当中存储数据一般是使用userId去存储来代表一个用户,如图:
但是,在某些业务场景下,前端需要展示这些信息,我们直接查出来返回,前端看到的就是这一串数字,不是很友好。
当然也可以使用代码的方式根据userId去查询出来userName,然后在一个个set值,最后进行返回,这种方式也是可以解决问题的,但是如果是一个大型项目或系统呢,有非常多表,这类型字段也很多,手动去转,代码量必然会很大且浪费许多精力、时间,
针对此情况,我们就可以使用java的反射机制,通过自定义一个注解,在这些字段上面加上这个注解
然后返回给前端的信息就可以通过反射机制,转换成真实的姓名。
首先,先自定义一个注解:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Person {}
然后在写一个工具类:
public void personCover(Object ...objs) {for (int i = 0; i < objs.length; i++) {Object obj = objs[i];final List<SysUser> sysUserList = interSysUserService.selectList();boolean isCollection = Collection.class.isAssignableFrom(obj.getClass());// 如果是集合if (isCollection) {List<Object> objList = (List<Object>) obj;objList.forEach(o -> {try {cover(o, sysUserList);} catch (Exception e) {e.printStackTrace();}});} else {cover(obj, sysUserList);}}}public void cover(Object obj, List<SysUser> sysUserList) {try {final Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field f : declaredFields) {final boolean annotationPresent = f.isAnnotationPresent(Person.class);if (annotationPresent) {f.setAccessible(true);final Object o = f.get(obj);for (SysUser sysUser : sysUserList) {if (sysUser.getUserId().equalsIgnoreCase(String.valueOf(o))) {f.set(obj, sysUser.getUserName());break;}}}}} catch (Exception e) {log.error("人员名称转换异常:" + e.getMessage(), e);throw new RuntimeException(e);}}
然后在需要做转换的字段上面加上刚刚自定义的注解:
然后在业务代码中注入刚刚写的工具类,括号中为查询出来的需要返回给前端的Vo信息(可以传多个)
personUtil.personCover(XXXVo);
到此,人员转换的自定义注解就完成了,前端看到的信息就是真实的名字,而不是一串谁都不认识的数字了。
以上就是本期分享,我是鱼尾~,有帮助的话就动动小手点个 赞 吧~
java 通过反射将userId转userName相关推荐
- java的反射技术_Java学习——反射技术
1. 反射机制介绍_Class对象获取 (1) 什么是(Reflection)反射?其它语言有这种特点吗? 答:动态语言:在程序运行时,可以改变程序的结构或变量的类型.典型的动态语言"Pyt ...
- Java中反射的三种常用方式
Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...
- java反射机制(三)---java的反射和代理实现IOC模式 模拟spring
IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...
- 【Java】反射( reflection)机制 详解
目录 1. 定义 2. 用途(了解即可) 3. 反射的基本信息 4. 反射相关的类(重要) 4.1 Class类(反射机制的起源 ) 4.2 Class类中的相关方法(方法的使用方法在后边的示例当中) ...
- java 泛型反射_Java使用反射来获取泛型信息示例
本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...
- java初反射_初始 java 反射机制 (一)
反射机制详解 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为j ...
- Java的反射机制 工厂模式综合讲解【转载自51CTO】
2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...
- [Java基础] 反射机制汇总
引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...
- Java 利用反射实现C#的委托
一, 观察者模式的缺点 在之前的博文的介绍过观察者模式了. 观察者模式可以让多个观察者同时观察1个被观察者. 也就说被观察者可以1次过执行所有观察者的update()方法. 再通俗d来讲, 就是多个观 ...
最新文章
- OSSIM平台安全事件关联分析实践
- 网络上一个人也是孤独地.
- 推荐一款Python开源库,技术人必备的造数据神器!
- 为什么按照 Angular 官网教程执行简单的测试代码,会遇到expect is not defined的错误消息
- .NET下,你采用的哪种方式来操作数据库
- Nginx 设置文件缓存时间
- inDesign教程,如何创建风格化的书籍封面?
- C语言的32个关键字怎么背,C语言32个关键字,精心整理带中文翻译
- 北京计算机学校招生要求,北京小升初 16区采取电脑随机录取的入学途径及规则 2021家长一定要看...
- NetBeans简介和简单使用
- 【熟知水星无线路由器的安装步骤】
- python取绝对值数组_Python算法——求数组中绝对值最小的数
- ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)
- Linux中解除带锁的文件夹
- 荣耀猎人游戏本散热怎么样?测试一下就知道
- android_10.0.0_r41自定义驱动编译+Framework层调用_2(自定义驱动)
- 【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)...
- DSP与DAC数字音频接口时钟分析
- 小桥加加的英语学习博客
- k8s之存储抽象nfs挂载