使用内省机制实现Map与Bean之间的转换
来源:互联网 发布:松山五小网络办公平台 编辑:程序博客网 时间:2024/06/09 19:55
1.什么是java内省机制?
内省(IntroSpector)是Java 语言对 Bean 类属性、事件的一种缺省处理方法。 JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信息储存在类的私有变量中,通过set()、get()获得。内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性。
与反射不同的是反射是在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。
个人肤浅理解,说白了内省主要就是获取类的属性描述器,通过setter、getter方法来操纵成员变量获取和设置值。
2. 说了这么多,直接上干货
2.1定义实体类
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorpublic class Student {private Long id;private String name;private boolean admin;}
2.2集合Map与Bean之间的转换
import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.util.HashMap;import java.util.Map;@SuppressWarnings("all")public class JavaBeanDemo {public static void main(String[] args) throws Exception {Student stu = new Student(1L, "小明", true);Map<String, Object> bean2map = bean2map(stu);System.out.println("bean2map:" + bean2map);Map<String, Object> map = new HashMap();map.put("id", 2L);map.put("name", "小红");map.put("admin", false);Student map2bean = map2bean(map, Student.class);System.out.println("map2bean:" + map2bean);}private static Map<String, Object> bean2map(Object obj) throws Exception {Class clazz = obj.getClass();Map<String, Object> map = new HashMap<>();BeanInfo beanInfo = Introspector.getBeanInfo(clazz, Object.class);//设置上限为Object,否则有Object的方法PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();for (PropertyDescriptor pd : pds) {map.put(pd.getName(), pd.getReadMethod().invoke(obj));}return map;}public static <T> T map2bean(Map<String, Object> map, Class clazz) throws Exception {T obj = (T) clazz.newInstance();BeanInfo beanInfo = Introspector.getBeanInfo(clazz, Object.class);PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();for (PropertyDescriptor pd : pds) {String key = pd.getName();pd.getWriteMethod().invoke(obj, map.get(key));}return obj;}}
2.3测试结果:
阅读全文
0 0
- 使用内省机制实现Map与Bean之间的转换
- java 利用内省实现bean和map的转换
- java注解实现map与bean之间的转换
- java 使用BeanInfo实现bean实体与map之间的互相转换
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- 使用Introspector(Java内省机制)实现Map转换为JavaBean
- 使用BeanMapper把map和bean之间的转换,list<bean>和list<map>之间的转换(含测试)
- 内省Introspector实现Bean对象转Map
- 使用反射,实现简单的JSON与Bean之间的转换
- JAXB实现JAVA BEAN与XML之间的转换
- JAXB 实现bean与xml之间的转换
- 利用Gson使json字符串与java bean/list/map之间的相互转换
- Java bean 与 Map的相互转换
- json 与 bean 之间的date转换
- json 与 bean 之间的date转换
- json 与 bean 之间的date转换
- java的反射与内省机制的实现
- 使用内省api操作bean的属性
- Sunscreen (贪心+优先队列)
- web前端第六天
- 求出0~999之间的所有“水仙花数”并输出。
- 整数字符串转换
- PHP 协程
- 使用内省机制实现Map与Bean之间的转换
- 使用dispatch_once实现单例
- 类别和扩展
- 自定义密码输入框和安全键盘
- javaagent
- Java对象的创建
- Linux下编译boost动态链接库和静态链接库
- Mysql修改数据库名方法
- 常见的GIT库 操作命令