记录一下反射的用法

 用org.springframework.util里面的工具类去反射注解的字段值

Class<?> clz = Class.forName("...");
Map<String, String> map = new ConcurrentHashMap<>();
ReflectionUtils.doWithFields( clz, field -> {
Table annotation = clazz.getAnnotation(Table.class);
String name = annotation.value();
String className = clazz.getSimpleName();
map.put("tableName", name);
map.put("className", className);
});

  

实体对象简单的反射的工具栏
package com.dscomm.datacenter.basicdata.util;

import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table; import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap; /**
* @description 反射工具类
*/
public class ReflectUtils { /**
* 获取实体类主键
*
* @param clazz
* @return
*/
public static Field getIdField(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
Field item = null;
for (Field field : fields) {
Id id = field.getAnnotation(Id.class);
if (id != null) {
field.setAccessible(true);
item = field;
break;
}
}
if (item == null) {
Class<?> superclass = clazz.getSuperclass();
if (superclass != null) {
item = getIdField(superclass);
}
}
return item;
} /**
* 根据字段名称获取实体类属性值
*
* @param field
* @return
*/
public static Map<String, String> getPkValueByName(Field field) {
Map<String, String> map = new ConcurrentHashMap<>();
Column declaredAnnotation = field.getDeclaredAnnotation(Column.class);
String column = declaredAnnotation.value();
map.put("fieldNames", field.getName());
map.put("type", field.getType().getName());
map.put("column", column);
return map;
} /**
* 通过反射将 class1不为空的值赋值给class2
*
* @param class1
* @param class2
* @throws Exception
*/
// public static void reflectClass1ToClass2(Object class1, Object class2) throws Exception {
// Field[] field = class1.getClass().getDeclaredFields();
// for (int i = 0; i < field.length; i++) {
// String name = field[i].getName();
// if ("serialVersionUID".equals(name)) {
// continue;
// }
// name = name.substring(0, 1).toUpperCase() + name.substring(1);
// Method m1 = class1.getClass().getMethod("get" + name);
// Object value = m1.invoke(class1);
// if (value != null) {
// Field f = field[i];
// f.setAccessible(true);
// f.set(class2, value);
// }
// }
// } /**
* 获取实体类 @Column 的其中一个属性名称
*
* @param clazz
* @return
*/
public static List<Map<String, String>> getColumnName(Class<?> clazz) {
List<Map<String,String>> list = new ArrayList<>();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Map<String, String> map = new ConcurrentHashMap<>();
if (field.isAnnotationPresent(Column.class)) {
/**
* 获取字段名
*/
Column declaredAnnotation = field.getDeclaredAnnotation(Column.class);
String column = declaredAnnotation.value();
map.put("fieldNames", field.getName());
map.put("type", field.getType().getName());
map.put("column", column);
list.add(map);
}
}
return list;
} /**
* 通过获取类上的@Table注解获取表名称
*
* @param clazz
* @return
*/
public static Map<String, String> getTableName(Class<?> clazz) {
Map<String, String> map = new ConcurrentHashMap<>();
Table annotation = clazz.getAnnotation(Table.class);
String name = annotation.value();
String className = clazz.getSimpleName();
map.put("tableName", name);
map.put("className", className);
return map;
} }

  

java反射简单的一些用法的更多相关文章

  1. Java反射-简单应用

    为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...

  2. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  3. Java反射 - 简单的给Bean赋值和取值

    由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子. 工具类BeanRefUtil:   package c ...

  4. Java反射简单使用--第一次细致阅读底层代码

    1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...

  5. Java 反射(简单捋一下)

    有Student类,Person类,还有一个叫Class的类,这是反射的源头. 正常方式:通过完整的类名 > 通过new实例化 > 取得实例化对象 反射方式:实例化对象 > getC ...

  6. java反射简单实例

    这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...

  7. java反射机制简单实例

    目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...

  8. java反射机制的简单介绍

    参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...

  9. java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

    java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类 ...

  10. Java反射(六)纯面向接口编程的简单框架实践

    我们知道在使用MyBatis开发时,只需要添加DAO接口和对应的映射XML文件,不需要写DAO的实现类,其实底层是通过动态代理实现. 本文将使用前几篇文章的知识点实现一个纯面向接口编程的简单框架,与M ...

随机推荐

  1. BUUCTF---rsa2

    题目 N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241 ...

  2. Chrome 135 版本开发者工具(DevTools)更新内容

    Chrome 135 版本开发者工具(DevTools)更新内容 一.性能(Performance)面板改进 1. 性能面板中的配置文件和函数调用现已显示来源和脚本链接 Performance > ...

  3. 使用PyMuPDF对pdf文件插入文字时 遇到配置本地的字体文件缺仍然使用默认Helvetica字体问题

    背景 昨天收到的新需求,一份文件从其他部门发起,进行一些文字填写后盖章,再到我们部门,我们接收到的是pdf文件,所以需要在pdf文件中进行修改,插入当日日期等文字.但有要求字体必须和原文档字体相同. ...

  4. php 二维数组转成一维数组

    // 1 $c = call_user_func('array_merge', $reds);// 2 $c = array_merge(...$reds);// 3 array_map(functi ...

  5. windows实现每天定时截图

    windows实现每天定时截图 一直想要做一个功能来给自己的电脑每天进行一个截图操作,今天终于做好了,下面分享一下设置的过程. 使用工具 任务计划程序(系统自带) snipaste (手动下载) 设置 ...

  6. Queue接口分析

    一.Queue是什么 该接口时Java集合框架成员 Queue: 通常(但不一定)队列就是一个先入先出(FIFO)的数据结构,和堆一样(但可以进行转换,比如优先级列队排序,又或者改为栈形式的后进先出数 ...

  7. Ubuntu安装部署Zabbix网络监控平台和设备配置添加

    概述 Zabbix 由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持. Zabbix 是一个企业级的开源分布式监控解决方案. Zabbix 是一款监控众多参数的 ...

  8. Torch-Pruning工具箱

    Torch-Pruning 通道剪枝网络实现加速的工作. Torch pruning是进行结构剪枝的pytorch工具箱,和pytorch官方提供的基于mask的非结构化剪枝不同,工具箱移除整个通道剪 ...

  9. python存储MongoDB数据

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活(总体来看,python ...

  10. ArkUI-X跨平台框架接入指南

    ArkUI跨平台框架(ArkUI-X)进一步将ArkUI开发框架扩展到了多个OS平台:目前支持OpenHarmony.Android. iOS,后续会逐步增加更多平台支持.开发者基于一套主代码,就可以 ...