BeanUtils源码解析
创始人
2024-05-22 00:53:56
0

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家,51CTO明日之星
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈

BeanUtils源码解析总结
🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈BeanUtils源码相关函数

这个BeanUtils类的主要作用是:JavaBeans 的静态便捷方法:用于实例化 bean、检查 bean 属性类型、复制 bean 属性等。

🍮Log logger

含义:这个成员变量使用于定义一个对象,用于类中日志的生成。
通过往底层查找,最后返回的事一个Log4jLog对象。
private static final Log logger = LogFactory.getLog(BeanUtils.class);

🍮Set> unknownEditorTypes

含义:这个用于保存未知的编辑器类型。
private static final Set> unknownEditorTypes = Collections.newSetFromMap(new ConcurrentReferenceHashMap<>(64));

🍮DEFAULT_TYPE_VALUES

含义:这个变量的含义就是用与存储默认的类型的值,用于存储相应的类型以及对应的默认值,如:int 默认是0,byte默认的为(byte)0
private static final Map, Object> DEFAULT_TYPE_VALUES;

🍮静态代码块

含义:这个函数的含义就是把不同的类型已经其默认的值添加到map中,并调用Collections.unmodifiableMap(values),把创建的map转化为一个不可修改的map,unmodifiableMap()这个函数会重新创建一个UnmodifiableMap类型的把values中的键值对传进去。

static {Map, Object> values = new HashMap<>();values.put(boolean.class, false);values.put(byte.class, (byte) 0);values.put(short.class, (short) 0);values.put(int.class, 0);values.put(long.class, (long) 0);DEFAULT_TYPE_VALUES = Collections.unmodifiableMap(values);
}

🍮static T instantiate(Class clazz)

含义:使用其无参数构造函数实例化类的便捷方法,函数的开头显示一个Assert.notnull 断言表示对象非空,然后再根据类型创建一个指定类的对象。

public static  T instantiate(Class clazz) throws BeanInstantiationException {Assert.notNull(clazz, "Class must not be null");if (clazz.isInterface()) {throw new BeanInstantiationException(clazz, "Specified class is an interface");}try {return clazz.newInstance();}catch (InstantiationException ex) {throw new BeanInstantiationException(clazz, "Is it an abstract class?", ex);}catch (IllegalAccessException ex) {throw new BeanInstantiationException(clazz, "Is the constructor accessible?", ex);}
}

🍮static T instantiateClass(Class clazz)

使用其“主”构造函数(对于 Kotlin 类,可能声明了默认参数)或其默认构造函数(对于常规 Java 类,需要标准的无参数设置)实例化一个类,其内部调用的函数instantiateClass也是调用构造器返回一个实例。

public static  T instantiateClass(Class clazz) throws BeanInstantiationException {
Assert.notNull(clazz, "Class must not be null");if (clazz.isInterface()) {throw new BeanInstantiationException(clazz, "Specified class is an interface");}try {return instantiateClass(clazz.getDeclaredConstructor());}catch (NoSuchMethodException ex) {Constructor ctor = findPrimaryConstructor(clazz);if (ctor != null) {return instantiateClass(ctor);}throw new BeanInstantiationException(clazz, "No default constructor found", ex);}catch (LinkageError err) {throw new BeanInstantiationException(clazz, "Unresolvable class definition", err);}
}

🍮Constructor findPrimaryConstructor(Class clazz)

含义:这个函数主要是通过反射的方法找到传入的clazz这个类中有多少构造函数,如无参构造函数,不同参数和个数的构造函数。

public static  Constructor findPrimaryConstructor(Class clazz) {Assert.notNull(clazz, "Class must not be null");if (KotlinDetector.isKotlinReflectPresent() && KotlinDetector.isKotlinType(clazz)) {Constructor kotlinPrimaryConstructor = KotlinDelegate.findPrimaryConstructor(clazz);if (kotlinPrimaryConstructor != null) {return kotlinPrimaryConstructor;}}return null;}

关于通过反射获取类中局部变量和方法的函数就不再多赘述,最常用的的就是 BeanUtils中的opyProperties方法,这个方法的作用就是把源对象中的向量拷贝到des对象中去。
BeanUtils.copyProperties(src,des);

🍚总结

以上是关于BeanUtils的简单总结,希望有所帮助,Written By 知识浅谈

相关内容

热门资讯

初中作文《七年级生活二三事》... 初中作文《七年级生活二三事》 篇一我是一名七年级的学生,回顾这一年来的生活,有许多值得分享的事情。在...
那时花开初中作文600字(优... 那时花开初中作文600字 篇一:回忆中的花开那时花开初中作文600字 篇二:花开的季节那时花开初中作...
作文那一幕让我难忘600字初... 作文那一幕让我难忘600字初一作文 篇一作文那一幕让我难忘我记得那是一个阳光明媚的早晨,我们班上的语...
再见了,亲爱的母校_初中记叙... 再见了,亲爱的母校_初中记叙文 篇一初中时光即将结束,我站在母校门口,心中涌上一股复杂的情感。这个学...
自信初中作文(最新6篇) 自信初中作文 篇一自信是一种重要的品质,它是我们面对困难和挑战时的力量源泉,也是我们取得成功的关键。...
他的勤奋影响了我初一作文85... 他的勤奋影响了我初一作文850字 篇一初中生活对于每一个学生来说都是一个全新的开始,充满了挑战和机遇...
不一样的春节作文【精选6篇】 不一样的春节作文 篇一春节是中国最重要的传统节日之一,它象征着团圆和喜庆。每年的春节,人们都会回到家...
黑板上的记忆初一作文(推荐6... 黑板上的记忆初一作文 篇一初一的时候,我对黑板上的记忆有着深刻的印象。每天上课,老师总是在黑板上写下...
在考场作文650字【优质5篇... 在考场作文650字 篇一勇敢面对挑战,实现梦想在人生的道路上,我们常常会遇到各种各样的挑战。无论是学...
我们的教学大楼初中英语作文(... 我们的教学大楼初中英语作文 篇一Our Teaching BuildingOur teaching ...
国庆节初中作文600字【实用... 篇一:国庆节的意义国庆节初中作文600字 篇一国庆节是我国最重要的节日之一,也是全国人民欢庆的日子。...
我们是一家人初中作文(精彩6... 我们是一家人初中作文 篇一我们是一家人家,是一个温暖的港湾,是我们成长的地方。而我们这个家庭,不仅仅...
我们是一家人初中作文600字... 篇一:我们是一家人我们是一家人初中作文600字 篇一作为一个家庭,我们之间的亲情是无法用言语来形容的...
与妹妹一起走过的日子的初中作... 与妹妹一起走过的日子的初中作文 篇一初中时光如同一幅绚丽的画卷,而妹妹则是这幅画卷中最美的一笔。我们...
触网初一作文(经典5篇) 触网初一作文 篇一:网络对我生活的影响近年来,随着互联网的普及和发展,网络已经成为我们生活中不可或缺...
送你一轮明月初中作文【推荐6... 送你一轮明月初中作文 篇一初秋的夜晚,明月高挂,洒下一片银光。我静静地坐在院子里,仰望着天空中那轮明...
钢笔字范文初一【推荐6篇】 钢笔字范文初一 篇一:我与钢笔字的邂逅初一的时候,我踏入了中学的大门,开始了新的学习生活。与小学不同...
最好的奖赏作文600字(实用... 最好的奖赏作文600字 篇一奖赏,是一种对于努力和付出的肯定和鼓励。而最好的奖赏,应该是能够激发人们...
我的母亲作文【精简6篇】 我的母亲作文 篇一母爱的力量我有一个非常伟大的母亲,她是我生命中最重要的人。她对我的爱和关怀无处不在...
回望来时的路作文650字(精... 回望来时的路作文650字 篇一回望来时的路,我不禁感慨万分。一路走来,我经历了许多风雨,也收获了许多...