物联网数据中心项目第四天
2020-07-12 17:21
176 查看
修改项目,添加配置模块,创建Main包,整理项目
1.通过dom4j解析xml文件
获取elements集合包含所有子元素,获取nodecount子元素的个数,手动遍历集合,分别赋值。
String… string为可变参数,在方法中表现为一个arrays数组,所以在遍历时正好可以通过控制参数i来获取string的第i个值
2.通过反射获取类镜像,并设置全局变量值。
使用反射获取类镜像,然后创建实例,获取field对象,修改实例的全局变量,用上面解析好的xml文件赋值。
(这是最初版,已舍弃)
public static Object getInstanceObject(String sonName,String... fieldName) { // 获取所有的子元素 List<Element> elements = root.elements(sonName); //子节点个数 int nodeCount = root.element(sonName).nodeCount(); System.out.println(nodeCount); // 获取权限类名 String gatherClassPath = root.element(sonName).attributeValue("class"); // 要返回的对象 Object newInstance = null; // 最终属性值 String elementTextTrim = null; try { Class<?> gatherClass = Class.forName(gatherClassPath); newInstance = gatherClass.newInstance(); // 获取什么元素 for(int i=0;i<nodeCount;i++) { for (Element element : elements) { elementTextTrim = element.elementTextTrim(fieldName[i]); Field field = gatherClass.getField(fieldName[i]); field.set(newInstance, elementTextTrim); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return newInstance; }
这是第一版,与前几天没有创建实例并且没有给全局变量赋值,仅仅在各个类中读取子标签内容相比改良很多,但依旧有改进空间。
3.第二版(迭代器)
第二版实现一一对应,类似key-value键值对,只需传入一个参数表明想实例化的是哪个类,就可以返回这个类的实例。同时,该实例的所有需要用xml配置文件中的数据进行赋值的变量也已经全部赋值完毕,可以直接调用想调用的方法。
public static Object getInstanceObject(String sonName) { // 获取权限类名 String gatherClassPath = root.element(sonName).attributeValue("class"); // 要返回的对象 Object newInstance = null; // 要赋值的属性值 String elementTextTrim = null; // 要赋值的属性名 String name =null; try { Class<?> gatherClass = Class.forName(gatherClassPath); newInstance = gatherClass.newInstance(); // 遍历节点 for (Iterator it = root.element(sonName).elementIterator(); it.hasNext();) { // 获取节点 Element element = (Element) it.next(); // 获取节点名 name = element.getName(); // 去掉空格,获取节点值 elementTextTrim = element.getTextTrim(); Field field = gatherClass.getField(name); field.set(newInstance, elementTextTrim); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return newInstance; }
在该方法中,先根据传入的参数,获取全限类型,直接创建实例,根据实例获取field对象。
然后遍用迭代器遍历需要用到的子标签,遍历的同时获取次级子标签名,次级子标签值,给当前这个实例的当前属性赋值。
4.创建Main包
删除所有非Main包中的类的main方法,靠main包中的ClientMain和ServerMain进行全部项目的开启。
最终测试结果
在入口类中,创建配置模块即可。
相关文章推荐
- 物联网数据中心项目第五天修改
- 物联网项目的思考
- 项目学习第四天ElasticSearch分布式搜索引擎
- 第七次作业——团队作业——项目冲刺———第四天
- 众筹网站项目第四天之弹层组件layer的使用及同步请求方式实现用户分页查询(1)
- swift项目第四天:动态加载控制器
- Beta项目冲刺–第四天
- 浅谈工业级物联网项目架构设计及实施
- 我的物联网项目(十) 线下之战
- 我的物联网项目(十一) 单数据库事务也需谨慎
- 我的物联网项目(九)久违的死循环
- CSDN物联网学习6 从端到云-工业物联网项目全栈快速开发
- 团队作业8——第二次项目冲刺(Beta阶段)--第四天
- 学生信息管理系统实训项目第四天
- 浅谈工业级物联网项目架构设计及实施
- 中国移动:物联网项目实战开发企业级应用(ssp框架应用、EXTJS4.2、GoogleMap、JPA)
- ## 项目第四天 ##
- 如何在阿里云物联网平台上利用已有的 IoT Studio项目模板创建项目
- java web项目如何与硬件设备(物联网)进行对接