首页 > 代码库 > JAXB学习(二): 对JAXB支持的主要注解的说明
JAXB学习(二): 对JAXB支持的主要注解的说明
我们在上一篇中对JAXB有了一个大致的认识,现在我们来了解JAXB的一些主要注解。
顶层元素:XmlRootElement
表示整个XML文档的类应该使用XmlRootElement修饰,其实就像之前那个简单例子那样,XmlRootElement也是最简单JAXB应用唯一需要用到的注解。
控制元素的选择:XmlAccessorType XmlTransient
如果JAXB绑定一个java类为XML,那么默认的会绑定所有public成员,包括 public的getter和setter对(必须同时有getter和setter)或者是public的属性。任何protected ,default和private的成员只有在被一个恰当的注解(例如 XmlElement 或者XmlAttribute)修饰时才会被绑定。 我们有几种方式来影响这种默认的行为。
1. 在 包 或者 顶层元素(也就是XmlRootElement修饰的类)上 使用 XmlAccessorType, 它的值有 FIELD
, PROPERTY
, PUBLIC_MEMBER
or NONE
FIELD : 任何非static 非 transient 的属性将会被绑定
PROPERTY :任何getter和setter对
PUBLIC_MEMBER : 这个就是上面描述的默认情况
NONE : NONE会压制任何绑定,除非明确的使用XmlElement或XmlAttribute修饰。
没有这个注解的类 可以从父类或者包级别的配置来继承。
2. 使用XmlTransient, 它会压制它的目标绑定。 考虑下面这种情况,有一个public 的属性foo,还有一对getFoo和setFoo,如果我们使用默认的配置将会出现 命名冲突,这时就可以使用XmlTransient来压制其中一个。
下面的例子我们在包级别使用XmlAccessorType,将绑定设置为 FIELD, 然后使用XmlTransient 压制其中的一个public属性。
首先在包下面建一个package-info.java 文件用来进行包注释。
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD) package com.massclouds.test;
顶层元素类:
package com.massclouds.test; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; @XmlRootElement public class Person { public String name; @XmlTransient public int age; private String gender; public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
在上面的配置中,Person的name和gender属性可以被绑定到xml中。 注意gender之所以会被绑定并不是因为getter和setter对,而是应为FIELD级别会将private的属性也绑定。
JAXB学习(二): 对JAXB支持的主要注解的说明