详尽分享项目分析_xxoo

简介: 详尽分享项目分析_xxoo

项目介绍:使用java1.5的原生xml操作类实现 对象xml字符串的相互转化

项目分析:主要分为是三个部分

1、容器类:AbstractContainer

存储xml、object对象的数组集合,管理xml/object的添加、删除、获取等,添加xml/object的同时会自动相互转化成其它对象并存储到数组中

2、DomConfigurableXmlParser-->doParseXml:xlm字符串转换成object对象

a) 使用javax.xm.parsers、org.w3c.dom原生库将xml字符串转化成Element对象

1

2

3

4

DocumentBuilder dombuilder = domfac.newDocumentBuilder();

ByteArrayInputStream inputStream = new ByteArrayInputStream(xml.getBytes());

Document doc = dombuilder.parse(inputStream);

Element root = doc.getDocumentElement();

b) 通过循环Element对象+反射转换成object对象

3、AbstractXmlBuilder-->buildXml:object对象转化成xml字符串

方法是通过object每个属性的值拼接成xml字符串

项目特点

1、不使用任何第三方库实现xml和object对象的相互转换

2、可以处理普通类型、日期类型(可通过注解设定格式)、集合(如ArrayList、HashSet)

3、部分代码解析:

a) Date.class.isAssignableFrom(field.getType()

判断field.getType()会否是Date的子类型(isAssignableFrom关系:父-->子)

b) A instanceof B:判断A是否是B的实例

c)复杂类型的处理(复杂类型并且是iterable类型)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

else if (Reflects.isComplexType(field.getType()) Iterable.class.isAssignableFrom(field.getType())) {

//属性为复杂类型,且是可迭代的(如数组、list、set类型等)

Class iterableGenericType = Reflects.getArrayGenericType(field);

Iterable iterable = null;

if (List.class.isAssignableFrom(field.getType())) {

iterable = new ArrayList();

}//代码效果参考:http://www.ezhiqi.com/zx/art_5312.html

if (Set.class.isAssignableFrom(field.getType())) {

iterable = new HashSet();

}

NodeList iterableNodeList = node.getChildNodes();

for (int j = 0 ; j < iterableNodeList.getLength() ; j++) {

Node iterableNode = iterableNodeList.item(j);

if (iterableNode.getNodeType() != Node.ELEMENT_NODE) {

continue;

}

//iterable为ArrayList或则HashSet

if (List.class.isAssignableFrom(field.getType())) {

((List)iterable).add(parseRecursion(iterableGenericType, iterableNode));

}

if (Set.class.isAssignableFrom(field.getType())) {

((Set)iterable).add(parseRecursion(iterableGenericType, iterableNode));

}

}

field.set(object, iterable);

Reflects.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

public class Reflects {

private Reflects(){}

/

判断是否复杂类型,版本1.0.0不支持java.lang java.util java.sql包中的实体类

@param clazz

@return boolean

/

public static boolean isComplexType(Class clazz){

if ((clazz.getName().startsWith("java.lang.") || clazz.getName().startsWith("java.util.")

|| clazz.getName().startsWith("java.sql.")) !clazz.isArray() !Iterable.class.isAssignableFrom(clazz) ) {

return false;

}

return true;

}

/

是否含有属性

@param clazz

@return boolean

/

public static boolean hasField(Class clazz){

if (clazz.getDeclaredFields() == null || clazz.getDeclaredFields().length == 0) {

return false;

}

return true;

}

/

返回一个默认构造器产生的实例

@param clazz

@return object

@throws InstantiationException

@throws IllegalAccessException

/

public static T getInstance(Class clazz) throws InstantiationException, IllegalAccessException{

return clazz.newInstance();

}

/

获取数组属性中所持有的类型

@param field

@return class

/

public static Class getArrayGenericType(Field field){

Type type = field.getGenericType();

if (type instanceof ParameterizedType) {

ParameterizedType parameterizedType = (ParameterizedType) type;

return (Class) parameterizedType.getActualTypeArguments()【0】;

}

return null;

}

}

来自为知笔记(Wiz)

附件列表

相关文章
|
8月前
|
数据挖掘 数据库 Python
Django实战:基于Django和openpyxl实现Excel导入导出功能
`openpyxl` 是用于处理 Excel 文件的 Python 库。本文详解其在 Django 项目中的实战应用,涵盖 Excel 文件的生成、下载、上传与解析。
284 0
Django实战:基于Django和openpyxl实现Excel导入导出功能
|
机器学习/深度学习 数据采集 算法
【机器学习】基于机器学习的分类算法对比实验
【机器学习】基于机器学习的分类算法对比实验
737 6
【机器学习】基于机器学习的分类算法对比实验
|
算法 C语言
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
225 0
|
网络协议 应用服务中间件 nginx
nginx 转发 rtmp 直播流
nginx 转发 rtmp 直播流
1222 0
|
SQL 分布式计算 Java
Spark 为什么比 Hive 快
Spark与Hive在数据处理上有显著区别。Spark以其内存计算和线程级并行提供更快的速度,但稳定性受内存限制。相比之下,Hive虽较慢,因使用MapReduce,其稳定性更高,对内存需求较小。在Shuffle方式上,Spark的内存 Shuffle 比Hive的磁盘 Shuffle 更高效。综上,Spark在处理速度和Shuffle上占优,Hive则在稳定性和资源管理上更胜一筹。
1387 0
|
网络协议
你知道Wireshark 最重要的功能是什么吗?
你知道Wireshark 最重要的功能是什么吗?
442 0
|
弹性计算 安全 关系型数据库
Terraform入门初实践
0.写在前面:在云巧资产市场中对项目进行交付过程中,能够快速复用已有组件和一键部署组件一直是我们追求的目标(关于云巧相关的理念可移步了解云巧 详细了解),因此以IaC理念出圈的Terraform,成为关注的重点。本文将介绍Terraform核心理念并结合运行demo完成对Terraform的探索和初级实践,为后续云巧市场更好的交付奠定基础。1.Terraform介绍:1.1 IACInfrastr
1500 0
Terraform入门初实践
|
供应链 算法 区块链
联盟链技术开发 | 联盟链开发团队
随着区块链技术的发展,联盟链已经逐渐成为了企业级应用区块链的首选方案。我们将从技术开发的角度探讨如何使用联盟链技术来构建可靠、高效的企业级区块链应用。作为一家专业的联盟链开发团队,我们团队在联盟链开发,公链开发这块已经深耕多年,目前已经拥有联盟链技术开发相对成熟经验,本文将重点为大家介绍关于联盟链的技术开发。
|
安全
安装 win11
安装 win11
550 0
安装 win11
|
机器学习/深度学习 传感器 监控
【车牌识别】基于卷积神经网络CNN实现车牌识别附matlab代码
【车牌识别】基于卷积神经网络CNN实现车牌识别附matlab代码