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

附件列表

相关文章
|
2月前
项目经理进行竞品分析时可以参考的几个网站
项目经理进行竞品分析时可以参考的几个网站
|
8月前
|
监控 项目管理
PMBOK泛读(第四章) - 项目整合管理(二)
PMBOK泛读(第四章) - 项目整合管理(二)
40 0
|
8月前
|
敏捷开发 监控 安全
PMBOK泛读(第四章) - 项目整合管理(一)
PMBOK泛读(第四章) - 项目整合管理
45 0
|
8月前
|
存储 安全 数据管理
PMBOK泛读(第十三章) - 项目相关方管理
PMBOK泛读(第十三章) - 项目相关方管理
71 0
|
8月前
|
存储 安全 数据管理
PMBOK泛读(第十章) - 项目沟通管理
PMBOK泛读(第十章) - 项目沟通管理
70 0
|
1天前
|
XML 存储 数据格式
详尽分享项目分析_xxoo
详尽分享项目分析_xxoo
|
8月前
|
前端开发 JavaScript Java
编写整个购物网站的项目代码指导
编写整个购物网站的项目代码
96 1
|
8月前
|
自然语言处理 数据挖掘 项目管理
PMBOK泛读(第五章) - 项目范围管理(二)
PMBOK泛读(第五章) - 项目范围管理(二)
42 0
|
8月前
|
数据可视化 数据挖掘 测试技术
PMBOK泛读(第五章) - 项目范围管理(一)
PMBOK泛读(第五章) - 项目范围管理
60 0
|
8月前
|
数据挖掘 项目管理 索引
PMBOK泛读(第四章) - 项目整合管理(四)
PMBOK泛读(第四章) - 项目整合管理(四)
37 0