详尽分享项目分析_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月前
项目经理进行竞品分析时可以参考的几个网站
项目经理进行竞品分析时可以参考的几个网站
|
敏捷开发 监控 安全
PMBOK泛读(第四章) - 项目整合管理(一)
PMBOK泛读(第四章) - 项目整合管理
76 0
|
监控 项目管理
PMBOK泛读(第四章) - 项目整合管理(二)
PMBOK泛读(第四章) - 项目整合管理(二)
71 0
|
存储 安全 数据管理
PMBOK泛读(第十三章) - 项目相关方管理
PMBOK泛读(第十三章) - 项目相关方管理
108 0
|
架构师
软件架构师的12项修炼——思维导图
脑图 图片2M多,加载比较慢 软件架构师的12项修炼 软件架构师的12项修炼——关系技能修炼(1)软件架构师的12项修炼——关系技能修炼(2) 个人介绍: 高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。
2104 0
|
3月前
|
数据挖掘 项目管理 调度
「软件项目管理」一文详解软件项目质量计划
该文章全面介绍了软件项目质量计划的制定方法,涵盖了质量模型、质量管理过程、质量保证与控制技术,并提出了软件质量改善的具体建议,帮助项目管理人员有效地提升软件产品的质量水平。
「软件项目管理」一文详解软件项目质量计划
|
3月前
|
算法 项目管理
「软件项目管理」一文详解软件项目进度计划
该文章深入讲解了软件项目进度计划的制定方法,包括关键路径法(CPM)的基本概念、ES/LS/EF/LF关系图的绘制、浮动时间的计算以及时间压缩和资源优化技术,并通过实例演示了如何有效管理项目时间。
|
3月前
|
项目管理
「软件项目管理」一文详解软件项目管理概述
该文章详细介绍了软件项目管理的关键概念、知识体系以及实施过程,涵盖了项目初始化、计划制定、执行控制到项目结束的全流程管理,并探讨了项目管理与过程管理在软件开发中的相互作用和应用。
「软件项目管理」一文详解软件项目管理概述
|
6月前
|
XML 存储 数据格式
详尽分享项目分析_xxoo
详尽分享项目分析_xxoo
32 2
|
数据挖掘 项目管理 索引
PMBOK泛读(第四章) - 项目整合管理(四)
PMBOK泛读(第四章) - 项目整合管理(四)
56 0