详尽分享项目分析_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)

附件列表

相关文章
|
7月前
项目经理进行竞品分析时可以参考的几个网站
项目经理进行竞品分析时可以参考的几个网站
|
架构师
软件架构师的12项修炼——思维导图
脑图 图片2M多,加载比较慢 软件架构师的12项修炼 软件架构师的12项修炼——关系技能修炼(1)软件架构师的12项修炼——关系技能修炼(2) 个人介绍: 高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。
2113 0
|
24天前
|
监控 数据可视化 搜索推荐
评测:如何通过高效的工具制定清晰的会务日程安排与任务清单?
随着2024年的到来,全球会议和活动安排日益重要。有效的会务日程管理工具不仅能提升工作效率,还能确保活动顺利进行。本文推荐六款适合2024年的会务日程安排工具:板栗看板、Trello、Asana、Monday.com、Microsoft Planner和ClickUp,分别介绍它们的功能、特点和适用场景,帮助您找到最合适的工具。
评测:如何通过高效的工具制定清晰的会务日程安排与任务清单?
|
3月前
|
项目管理
「软件项目管理」一文详解软件项目管理概述
该文章详细介绍了软件项目管理的关键概念、知识体系以及实施过程,涵盖了项目初始化、计划制定、执行控制到项目结束的全流程管理,并探讨了项目管理与过程管理在软件开发中的相互作用和应用。
「软件项目管理」一文详解软件项目管理概述
|
6月前
|
XML 存储 数据格式
详尽分享项目分析_xxoo
详尽分享项目分析_xxoo
36 2
|
7月前
|
测试技术 项目管理
软件测试/测试管理|如何打造一份出彩的工作汇报!
软件测试/测试管理|如何打造一份出彩的工作汇报!
|
监控 项目管理
项目管理的49个过程整理(一)
项目管理的49个过程整理
85 0
|
项目管理
项目管理的49个过程整理(二)
项目管理的49个过程整理(二)
60 0
|
存储 数据可视化 程序员
选择文库系统的时候需要重点注意和对比哪些东西?
本人程序员出身,接近15年的代码经验,对互联网产品和运营也一直在实践和研究,尤其是对文库产品有着深度理解,因为我自己也一直在运营文库项目。下面是我站在一个普通站长角度给出的一些经验,如果你也想做一个文库网站或文库平台,需要选择一套文库系统产品,请从下面几点出发去做对比,最终做出正确选择。
选择文库系统的时候需要重点注意和对比哪些东西?
|
敏捷开发 人工智能 自然语言处理
测试思想-文档评审 需求分析和评审简述
测试思想-文档评审 需求分析和评审简述
122 0

热门文章

最新文章