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, 它的值有  FIELDPROPERTYPUBLIC_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的属性也绑定。

时间: 2024-12-21 05:19:58

JAXB学习(二): 对JAXB支持的主要注解的说明的相关文章

WCF学习之旅—实现支持REST客户端应用(二十四)

WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持REST的WCF服务端程序,本文介绍如何调用上一篇文章介绍的RestFul服务端. 五.Windows客户端调用 为了强调REST的通用性,客户端不用WCF的形式调用服务,而是采用HttpWebResponse通过编程方式直接访问,消息格式我们选XML. 首先,我们使用C#来封装一个RestHelper类

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

Makefile持续学习二

Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生成的文件,文件的依赖文件,生成的命令 2.隐晦规则:由make自动推动功能完成 3.变量定义:变量一般都是字符串,类似C语言中的宏定义,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上 4.文件指示: 在一个Makefile中引用另一个Makefile 根据某些情指定Makefil

Jetty学习二:配置概览-怎么配置Jetty

Jetty POJO配置 Jetty的核心组件是Plain Old Java Objects(POJOs):配置Jetty的大部分工作就是在Jetty POJOs上的初始化.装配和设置域的处理,你能通过以下的方式来实现:  1)直接通过Java代码初始化和装配Jetty对象.这个在后面Embedding Jetty讲. 2)用Jetty XML配置(一个控制反转(IoC)框架)初始化和装配Jetty对象.etc/jetty.xml文件是基本的Jetty XML配置文件,但有一些其它的etc/je

u-boot学习(二):u-boot简要分析

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 看到不错的文章,不要添加收藏夹,想着以后有时间再看,因为很有可能你以后再也不会看它们了. 想写总结的文章,不要想着等到以后有时间了再总结,因为很有可能你以后更没有时间总结它们了. --送给自己 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

emberjs学习二(ember-data和localstorage_adapter)

emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用bower install安装这两个插件.如下 "dependencies": { "jquery": "~1.9.1", "ember": "~1.13.10", "handlebars"

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

spring 自定义标签 学习二

在上篇中写的只支持写属性,不支持标签property的写法,但是如果有时候我们还想做成支持 property的用法,则可以在xsd中增加spring 自带的xsd引用 修改xsd文件如下: <?xml version="1.0"encoding="UTF-8"?> <xsd:schema xmlns="http://www.ruishenh.com/custom/myTest" xmlns:xsd="http://ww

Swift开发学习(二):Playground

Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用户体验.其实软件开发者自己也是用户,是各种开发工具的使用者,也会喜欢用户体验做得好的工具软件.这次苹果想开发者所想,提供了一个可以玩转swift的游乐场--Playground,它为开发着提供了方便.提供了乐趣. 原文作者:Power 转载请保留此链接. Playground可以干什么 快速练习swift 不需要编译.不需要点击执行,编写代码后直接看效果 是不是比脚本语言还方便? 开发者可以通过Playgr

puppet基础学习(二)

puppet基础学习(二) 六.ResourceOrdering(资源定序) 使用变化参数before , require , notify , subscribe catalog是对一个给定的系统的所有资源及关系的编译,在编译catalog时,除非我们指定资源的执行顺序,不然puppet是以其自己的顺序管理,大多数时候puppet指定适当的方式,例如puppet管理用户gigabyte应该存在和文件夹/home/gigabyte/bin应该存在并属于用户gigabyte时,puppet会自动指