zoukankan      html  css  js  c++  java
  • xstream中几个注解的含义和用法(转)

    XStream是个很强大的工具,能将Java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;从java对象序列化为xml,toXML()即可,很方便。xstream也支持注解方式,这些都是为了简化输出而设计,下面为大家简单说一下这几个注解的含义和用法。

    1. 当没有任何注解情况下

    [java] view plain copy
     
    1. public class Cat {    
    2.     //名字    
    3.     private String name;    
    4.     //大小    
    5.     private Integer age;    
    6.     //玩具球  球具有颜色属性    
    7.     private List<Ball> balls;    
    8.         
    9.     Cat(String name,Integer age,List<Ball> balls){    
    10.         this.name = name;    
    11.         this.age = age;    
    12.         this.balls=balls;    
    13.     }    
    14.     //getter/setter方法 为了赋值使用    

    其中Ball定义如下:

    [java] view plain copy
     
    1. public class Ball {  
    2.     //颜色  
    3.     private String color;  
    4.   
    5.     Ball(String color){  
    6.         this.color = color;  
    7.     }  

    没有任何注解,输出如下:

    [java] view plain copy
     
    1. public static void main(String[] args) throws Exception{  
    2.         //初始化cat  
    3.         List<Ball> balls = new ArrayList<Ball>();  
    4.         balls.add(new Ball("red"));  
    5.         Cat cat = new Cat("馄饨",1,balls);  
    6.         //初始化结束  
    7.         //为了方便查找 将文件制定到D盘cat.xml中  
    8.         FileOutputStream fout = new FileOutputStream("D:/cat.xml");  
    9.         XStream xs = new XStream();  
    10.         xs.toXML(cat,fout);  
    11.     }<span style="font-size:14px;">  
    12. </span>  

    得到Cat.xml如下

    [java] view plain copy
     
    1. <com.timejob.node.Cat>  
    2.   <name>馄饨</name>  
    3.   <age>1</age>  
    4.   <balls>  
    5.     <com.timejob.node.Ball>  
    6.       <color>red</color>  
    7.     </com.timejob.node.Ball>  
    8.   </balls>  
    9. </com.timejob.node.Cat>  


    1. @XStreamAlias("cat") 等同于 xstream.alias("cat", Cat.class); 

    [java] view plain copy
     
    1. @XStreamAlias("cat")  //here   
    2. public class Cat {  
    3.     //名字  
    4.     private String name;  
    5.     //大小  
    6.     private Integer age;  
    7.     //玩具球  球具有颜色属性  
    8.     private List<Ball> balls;  

    我们需要明确给出,哪个类的注解需要被激活:

    [java] view plain copy
     
    1. public static void main(String[] args) throws Exception{  
    2.         //初始化cat  
    3.         List<Ball> balls = new ArrayList<Ball>();  
    4.         balls.add(new Ball("red"));  
    5.         Cat cat = new Cat("馄饨",1,balls);  
    6.         //初始化结束  
    7.         //为了方便查找 将文件制定到D盘cat.xml中  
    8.         FileOutputStream fout = new FileOutputStream("D:/cat.xml");  
    9.         XStream xs = new XStream();  
    10.         //xs.alias("cat", Cat.class); //等同于 @XStreamAlias("cat")  
    11.         xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用  
    12.         xs.toXML(cat,fout);  
    13.     }  

    当我们在Cat类名使用该注解时,表明该类序列化为xml时,类名com.timejob.node.Cat将替换成cat输出,这样使得xml更清晰简短:

    [java] view plain copy
     
    1. <cat>  
    2.   <name>馄饨</name>  
    3.   <age>1</age>  
    4.   <balls>  
    5.     <com.timejob.node.Ball>  
    6.       <color>red</color>  
    7.     </com.timejob.node.Ball>  
    8.   </balls>  
    9. </cat>  


    2. XStreamAsAttribute 作用是将类内成员作为父节点属性输出,等同于xstream.useAttributeFor(Cat.class, "name")

    [java] view plain copy
     
    1. @XStreamAlias("cat")  
    2. public class Cat {  
    3.     //名字  
    4.     @XStreamAsAttribute // here  将name作为Cat属性输出在父节点  
    5.     private String name;  
    6.     //大小  
    7.     private Integer age;  
    8.     //玩具球  球具有颜色属性  
    9.     private List<Ball> balls;  
    10.       

    其他代码保持不变,输出后cat.xml如下:

    [java] view plain copy
     
    1. <cat name="馄饨">  
    2.   <age>1</age>  
    3.   <balls>  
    4.     <com.timejob.node.Ball>  
    5.       <color>red</color>  
    6.     </com.timejob.node.Ball>  
    7.   </balls>  
    8. </cat>  

    我们看到name属性已经作为 cat的属性输出在根节点上

    3. @XStreamAlias 作用就是将属性按照别名输出,等同于xstream.aliasField("catAge", Cat.class, "age");

    [java] view plain copy
     
    1. @XStreamAlias("cat")  
    2. public class Cat {  
    3.     //名字  
    4.     @XStreamAsAttribute  
    5.     private String name;  
    6.     //大小  
    7.     @XStreamAlias("catAge")  //here  
    8.     private Integer age;  
    9.     //玩具球  球具有颜色属性  
    10.     private List<Ball> balls;  

    得到cat.xml文件如下:

    [java] view plain copy
     
    1. <cat name="馄饨">  
    2.   <catAge>1</catAge>  
    3.   <balls>  
    4.     <com.timejob.node.Ball>  
    5.       <color>red</color>  
    6.     </com.timejob.node.Ball>  
    7.   </balls>  
    8. </cat>  

    4.对于集合常用的注解 @XStreamImplicit 去除<Balls></Balls>显示,只显示之间的<Ball></Ball>节点元素

    [java] view plain copy
     
    1. @XStreamAlias("cat")  
    2. public class Cat {  
    3.     //名字  
    4.     @XStreamAsAttribute  
    5.     private String name;  
    6.     //大小  
    7.     @XStreamAlias("catAge")  
    8.     private Integer age;  
    9.     //玩具球  球具有颜色属性  
    10.     @XStreamImplicit    //here  
    11.     private List<Ball> balls;  

    此时输出如下:

    [java] view plain copy
     
    1. <cat name="馄饨">  
    2.   <catAge>1</catAge>  
    3.   <com.timejob.node.Ball>  
    4.     <color>red</color>  
    5.   </com.timejob.node.Ball>  
    6. </cat>  

    这样看起来就更加简洁了。

    4.还有几个注解,都是比较好理解的,如@XStreamOmitField 表明该属性不会被序列化到xml中。

    [java] view plain copy
     
    1. @XStreamAlias("cat")  
    2. public class Cat {  
    3.     //名字  
    4.     @XStreamAsAttribute  
    5.     private String name;  
    6.     //大小  
    7.     @XStreamAlias("catAge")  
    8.     private Integer age;  
    9.     //玩具球  球具有颜色属性  
    10.     @XStreamImplicit  
    11.     private List<Ball> balls;  
    12.     @XStreamOmitField        //here  
    13.     private String noCare;  

    常用的就这么几个,其他的再讨论和学习吧。

  • 相关阅读:
    HDU 1124 Factorial
    hdu 1690 Bus System
    hdu 1113 Word Amalgamation
    POJ 2482 Stars in Your Window
    hdu 1385 ZOJ 1456 Minimum Transport Cost(经典floyd)
    hdu 1907 John
    VMware 虚拟机 安装 UBuntu 9.10 命令模式转换成窗口模试
    #pragma CODE_SEG __NEAR_SEG NON_BANKED详解
    Ubuntu 下Hadoop 伪分布式 hadoop0.20.2.tar.gz 的安装
    文件拷贝代码以及疑问
  • 原文地址:https://www.cnblogs.com/Syria/p/6422280.html
Copyright © 2011-2022 走看看