xstream中幾個註解的含義和用法(轉)

XStream是個很強大的工具,能將Java對象和xml之間相互轉化。xstream不在乎java類中成員變量是私有仍是公有,也不在意是否有默認構造函數。它調用方式也很是簡單:從xml對象轉化爲java對象,使用fromXML()方法;從java對象序列化爲xml,toXML()便可,很方便。xstream也支持註解方式,這些都是爲了簡化輸出而設計,下面爲你們簡單說一下這幾個註解的含義和用法。java

1. 當沒有任何註解狀況下node

[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); this

 

 

[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;  

 

咱們須要明確給出,哪一個類的註解須要被激活:spa

 

[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更清晰簡短:.net

 

 

[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以下: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;  

 

 

經常使用的就這麼幾個,其餘的再討論和學習吧。

相關文章
相關標籤/搜索