1.自定义一个注解
源码如下
import java.lang.annotation.*;
/**
*
*
* @author: LinWeiDa
* @date: 2020-09-26 10:07
*/
@Target(ElementType.FIELD) //表示作用的字段上
@Retention(RetentionPolicy.RUNTIME) //表示生效时间:运行时
@Documented //表示只负责标记,不负责取值
public @interface beanToMap {
}
2.封装工具类 BeanUtils
源码如下:
import cn.hutool.core.bean.BeanUtil;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
/**
*
*
* @author: LinWeiDa
* @date: 2020-09-26 14:34
*/
public class BeanUtils {
/**
* javaBean转Map 使用自定义注解 运行时间大约为9毫秒 耗时短
*
* @param javaBean 对象
* @param annotationClass 自定义注解Class
* @return: java.util.Map<java.lang.String,java.lang.Object>
* @author: LinWeiDa
* @date: 2020/9/26 14:44
**/
public static Map<String,Object> javaBean2Map(Object javaBean, Class annotationClass) throws IllegalAccessException {
//创建存放的map集合
Map<String,Object> map = new HashMap<>();
//根据反射获得该javaBean下的所有字段
Field[] declaredFields = javaBean.getClass().getDeclaredFields();
//不考虑javaBean下无字段 循环遍历字段
for (Field field : declaredFields){
//判断该字段是否被自定义的注解修饰 有被修饰返回true,没有返回false
boolean annotationPresent = field.isAnnotationPresent(annotationClass);
if (!annotationPresent){
//获取字段名
String name = field.getName();
//将accessible的值设为true,这样可以才可以访问到被private修饰的字段
field.setAccessible(true);
//获取该字段的值
Object value = field.get(javaBean);
//存入map中
map.put(name,value);
}
}
return map;
}
}
3.创建实体类
源码如下:
import annotation.beanToMap;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @author: LinWeiDa
* @date: 2020-09-23 16:29
*/
@Data //代替getter setter
@AllArgsConstructor //全参构造
@NoArgsConstructor //无参构造
public class User{
@beanToMap //在要过滤的字段上加入自定义注解
private String id;
private String userName;
private String password;
private String age;
}
4.调用工具实现bean转换为map
源码如下
public class test {
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException {
//对象的初始化
User user = new User("1", "lin", "888888", "18");
//调用自己编写的工具类
Map<String, Object> map = BeanUtils.javaBean2Map(user, beanToMap.class);
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("键 key :" + entry.getKey() + " 值value :" + entry.getValue());
}
}
}
运行结果:
如果有什么问题或者指教可以加q联系我 172227406