第一次玩github,第一个开源小项目——xxoo

第一次玩github,第一个开源小项目——xxoo引言   由于最近的工作写代码比较少,这让LZ产生了一丝危机感。于是便想找一个办法可以没事自己写写代码,自然而然就想到了github。接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号,然后创建自己的仓库。看着自己空荡荡的仓库,LZ就想着放上去一些自己平时写的东西,不过仔细一翻才发现,自己平时写的代码都是一片一片的,几乎没有完整的项目或者代码。  平时LZ写博客的时候

大家好,又见面了,我是你们的朋友全栈君。引言

 

  由于最近的工作写代码比较少,这让LZ产生了一丝危机感。于是便想找一个办法可以没事自己写写代码,自然而然就想到了github。接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号,然后创建自己的仓库。看着自己空荡荡的仓库,LZ就想着放上去一些自己平时写的东西,不过仔细一翻才发现,自己平时写的代码都是一片一片的,几乎没有完整的项目或者代码。

  平时LZ写博客的时候会写不少代码,尤其是当初在写设计模式系列的时候,代码更是堆积如山。不过可惜的是,由于这个系列有时候是LZ在家用自己的电脑写的,有时候是在公司的时候用公司的电脑写的,而且有时候是写好了复制到博客上就可能删掉或者覆盖了,于是就造成代码的分割和不完整,看起来零零碎碎的。

  想到这里,LZ就更坚定了使用github的决心,其它不说,它至少可以当做自己的SVN仓库。这样的话,如果以后再写代码,就不用担心代码的零零碎碎,又或者是干脆丢失找不到了,这些代码虽然不是什么好东西,但对自己来说,其实也代表着当时的思考,有时候对自己还是很有用的。

 

基于Java的xml和object转换工具

 

  其实Java当中,现在已经有了JAXB这个关于xml和object的转换工具,当时LZ写这个工具的时候,主要是因为JAXB不是JDK1.5自带的,导入的jar包相对较多也较大,功能虽然强大但却不实用。因为我们公司的需求很简单,只需要一个十分简单的转换就可以,于是当时LZ就自己写了一个简单的转换工具,并称之为simple-xml2object,首发于LZ的CSDN老博客,这个小工具还给LZ赚了不少下载积分,呵呵。

  不过当时没公开源码,很大的原因是因为,LZ觉得这个工具主要是提供简单的转换功能,如果单纯从源码上来看的话,实在没有什么亮点。不过现在想法有点不一样了,不管是好代码烂代码,只要是自己亲手写的,就有其保存的价值。而且有了github,这种保存十分方便,既然如此,为何不保存呢?LZ想不出理由拒绝这种好处,当然了,如果有人能在github上提提意见,改善改善这个工具,那LZ更是求之不得了。

 

xxoo的诞生

 

  现在simple-xml2object在github上正式更名为xxoo,并采用apacheV2开源协议。说起这个名字的来历,还是比较偶然的,昨晚LZ在github创建这个项目的时候,总觉得simple-xml2object这个名字太长了,因此LZ刚开始其实是想叫x2o或者o2x,但又仔细一看这两个转换的缩写,这不就是两个x和两个o吗,于是秉承着“简单,好记”的原则,一个名为xxoo的转换工具就这么产生了。

  总而言之,言而总之,xxoo就是一个简单的Java版的xml和object转换的工具,并没有任何高深的东西,因此LZ这里就不再多说废话了,直接上源码的相关地址和一些相关的简单示例。

  1、SVN地址:https://github.com/xiaolongzuo/xxoo

  2、SSH地址:git@github.com:xiaolongzuo/xxoo.git

  以下是项目的简单目录,其中演示的示例LZ放在了test目录当中,各位如果在SVN里检出源码,可以先看一下里面的示例。

第一次玩github,第一个开源小项目——xxoo

  在test包当中,有一个类专门写的是xxoo的示例代码,也算是xxoo的一般使用方式,它的具体代码如下。

package cn.zxl.xxoo.test; import java.io.IOException; import cn.zxl.xxoo.container.ConfigurableContainer; import cn.zxl.xxoo.container.Container; import cn.zxl.xxoo.processor.XmlBulider; import cn.zxl.xxoo.processor.XmlBulider.Format; import cn.zxl.xxoo.support.DefaultConfigurableContainer; public class Transfer { public static void main(String[] args) throws IOException { //测试不可配置的容器
        useUnconfigurableContainer("E:/test1.xml"); //测试可配置的容器
        useConfigurableContainer("E:/test2.xml"); } public static void useUnconfigurableContainer(String path) throws IOException{ //不可配置的容器
        Container container = new DefaultConfigurableContainer(Object.class); //向容器中添加一个复杂的Test对象
 container.add(Object.createObject()); //获取容器自动解析的xml内容
        String xml = container.getXml(); //将xml内容存放在一个文件中
 FileUtils.write(path, xml); } public static void useConfigurableContainer(String path) throws IOException{ //可配置的容器,使用可配置的容器接口,推荐此种方式,比较灵活
        ConfigurableContainer configurableContainer = new DefaultConfigurableContainer(Object.class); XmlBulider xmlBulider = configurableContainer.getXmlBulider(); //设置构建器的xml格式
 xmlBulider.setFormat(Format.TAB_AND_LINE); //改变容器中的构建器
 configurableContainer.setXmlBulider(xmlBulider); //向可配置容器添加复杂对象
 configurableContainer.add(Object.createObject()); //获取容器自动解析的xml内容,比较下不能配置的容器构建的xml格式和日期格式
        String configXml = configurableContainer.getXml(0);//等同于getXml() //将xml内容存放在一个文件中
 FileUtils.write(path, configXml); /* --------------------------------- */
        
        //再将xml从test2.xml中读取出来
        String readableConfigXml = FileUtils.read(path); //向容器中再加入一个xml
 configurableContainer.add(readableConfigXml); //获取容器自动解析的对象 //因为之前已经加入了一个对象,所以在加入xml之前,容器中已包含一对xml和object,此时索引为1 //容器维护了两个保持一致的数组,分别存放xml和object,索引规则与数组一致,从0开始
        Object test = configurableContainer.getObject(1); //打印容器大小
        System.out.println("size:" + configurableContainer.size()); //打印解析的对象,打印的可能不太清楚 //要想打印格式清晰,与我当初构建xml时相似,过程比较复杂,就不写那么详细了,各位可以自己加断点看对象内容
 System.out.println(test); } }

  以下是一个xxoo工具生成的XML,算是一个简单的演示吧,各位也可以自己试试。

<?xml version="1.0" encoding="UTF-8"?>
<Object>
    <stringParam>stringValue</stringParam>
    <dateParam>2013-11-09 03</dateParam>
    <testParam>
        <stringParam>stringValue</stringParam>
        <dateParam>2013-11-09 03</dateParam>
        <testParam>
            <stringParam>stringValue</stringParam>
            <dateParam>2013-11-09 03</dateParam>
            <testParam>
                <stringParam>stringValue</stringParam>
                <dateParam>2013-11-09 03</dateParam>
            </testParam>
            <testListParam>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                    <testListParam>
                        <Object>
                            <stringParam>stringValue</stringParam>
                            <dateParam>2013-11-09 03</dateParam>
                        </Object>
                        <Object>
                            <stringParam>stringValue</stringParam>
                            <dateParam>2013-11-09 03</dateParam>
                        </Object>
                    </testListParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
                <Object>
                    <stringParam>stringValue</stringParam>
                    <dateParam>2013-11-09 03</dateParam>
                </Object>
            </testListParam>
        </testParam>
    </testParam>
</Object>

  上述XML文件基于下面这样一个测试使用的Object类,代码如下。

public class Object implements Serializable{ private static final long serialVersionUID = 1L; private String stringParam = "stringValue"; @ADate(format = "yyyy-MM-dd hh")//日期注解,设置日期格式
    private Date dateParam = new Date(); private Object testParam; private List<Object> testListParam; }

  上面省略了get/set方法,其中的ADate是一个注解,可以定义日期在xml中的格式,这四个属性都是无意义的属性,各位不要纠结于这个,它们仅仅是为了测试。当然了,LZ个人的测试力度其实非常不足,不过基本的功能肯定是可以的,因为它可能已经被一小部分人在使用(CSDN下载次数75,囧),LZ当然就是其中一个。不过这其中难免会有一些隐藏的bug,这就看各位的火眼金睛够不够亮了,睁大你的17K氪金近视眼来挑LZ的bug吧,LZ将感激不尽。

  

用后感

 

  第一次使用github来保管代码,感觉还是十分不错的,决定以后就用它了。最可惜的就是,当时那24个设计模式的代码没有整理到github上面去,LZ悔之不及啊。如果哪位猿友也在为自己平时的代码保存发愁,那就不要再犹豫了,赶紧踏上github的路途吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160905.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • group by 的用法[通俗易懂]

    group by 的用法[通俗易懂]版权声明:本文为CSDN博主「IT界一股清流」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/jerrytomc

    2022年7月1日
    23
  • 大数据开发工程师面试题以及答案整理(二)

    大数据开发工程师面试题以及答案整理(二)Redis性能优化,单机增加CPU核数是否会提高性能1、根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。2、当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。3、如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。4、不要让你的Redis所在机…

    2022年5月30日
    33
  • 搭建php程序之Linux 安装PHP集成环境宝塔面板

    搭建php程序之Linux 安装PHP集成环境宝塔面板哈尔滨洛弘科技有限公司-liunx系统之宝塔面板搭建程序

    2022年6月28日
    52
  • JQuery部分内容整理

    JQuery部分内容整理

    2021年10月3日
    38
  • python fill函数填充_python开始填充

    python fill函数填充_python开始填充摘要:这篇Python开发技术栏目下的“pythondataframe向下向上填充,fillna和ffill的方法”,介绍的技术点是“DataFrame、fillna、Python、ffill、_和__、填充”,希望对大家开发技术学习和问题解决有帮助。今天小编就为大家分享一篇pythondataframe向下向上填充,fillna和ffill的方法,具有很好的参考价值,希望对大家有所帮助。一起…

    2022年8月12日
    5
  • icem二维非结构网格划分_ICEM_CFD划分六面体结构网格

    icem二维非结构网格划分_ICEM_CFD划分六面体结构网格ICEMCFD是CAE前处理软件,可输出多种网格格式,供Fluent、CFX、Abaqus等CFD软件使用。ICEM有多种几何接口,如CATIA、SolidWorks,SolidEdge等。ICEMCFD中可以生成多重拓扑块的结构和非结构化网格,采用了先进的O-Grid等技术,用户可以方便地在ICEMCFD中对非规则几何形状划出高质量的“O”形、“C”形、“L”形六面体网格。下面将以弯…

    2022年5月9日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号