java反射简单的一些用法
记录一下反射的用法
用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反射简单的一些用法的更多相关文章
- Java反射-简单应用
为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...
- Java反射+简单工厂模式总结
除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...
- Java反射 - 简单的给Bean赋值和取值
由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子. 工具类BeanRefUtil: package c ...
- Java反射简单使用--第一次细致阅读底层代码
1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...
- Java 反射(简单捋一下)
有Student类,Person类,还有一个叫Class的类,这是反射的源头. 正常方式:通过完整的类名 > 通过new实例化 > 取得实例化对象 反射方式:实例化对象 > getC ...
- java反射简单实例
这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...
- java反射机制简单实例
目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...
- java反射机制的简单介绍
参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...
- java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象
java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类 ...
- Java反射(六)纯面向接口编程的简单框架实践
我们知道在使用MyBatis开发时,只需要添加DAO接口和对应的映射XML文件,不需要写DAO的实现类,其实底层是通过动态代理实现. 本文将使用前几篇文章的知识点实现一个纯面向接口编程的简单框架,与M ...
随机推荐
- 【Pandas】concat方法使用注意点
使用pandas库的concat做数据拼接需要注意,应该先对原始数据设置列名,如果没有设置列名,在拼接时只会保留第一个文件的第一行(以列名形式),由于剩下的文件在读取时会自动将第一行作为列名,这样就会 ...
- nginx 部署配置
下载nginx 包(http://nginx.org/en/download.html) nginx常用命令: nginx -s stop 快速关闭Nginx,可能不保存相关信息,并终止w ...
- 再说cxGrid主从表相关
查了那么多叽叽歪歪的资料:masterView的key,从表key和detailkey以及从表需要排序. 注意设定参数后,最后active数据集.这里有个顺序问题,否则会增加随机新 回到原点看随机he ...
- 学习Linux只要学会这个命令就够了!
大家好,我是良许. 这段时间又是搬家,又是找新办公室,现在终于安顿下来了,有时间给大家分享干货了. 今天给大家介绍一个 Linux 超级实用命令,有了这个命令,你就可以愉快使用 Linux 上几乎所有 ...
- 卸载重装vscode
最近工作需要长期用到python,但我的老电脑又实在拉不起pycharm那配置,干脆就用vscode了,但本来我的vscode是用来写c/c++的,安装配置一通乱搞,现在也不知道怎么配置回来了. 干脆 ...
- astc内存大小计算方式
https://www.cnblogs.com/bylle/p/12212823.html
- 基于XML的方式配置AOP
第一步:把通知类用 bean 标签配置起来 <bean id="txManager" class="com.atguigu.account.utils.Transa ...
- Eclipse 安装Server-Apache Tomcat 选择(Tomcat 9.0选项)
1.打开组件安装 Eclipse→Help→Install New Software 2.输入当前eclipse对应版本(例如:2022-06),选择提示的官方路径 3.选择最底下的Web, XML, ...
- tp5 分页权限权限设置显示
$adminid = cookie("adminid"); $shop_id=$this->get_shop_id(); if($adminid==1){ $uid = in ...
- 拿来即用的下载Excel模板
模板导出 拿来即用 @PostMapping("/templateExport") @ApiOperation(value = "模板导出", notes = ...