1.Xstream简介;
使用限制: JDK版本不能<1.5.
虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件.
特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用. i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持 JSON 和 morphing.
使用场景
Transport 转换
Persistence 持久化对象
Configuration 配置
Unit Tests 单元测
2.Xstream注解常用知识:
@XStreamAlias(“message”) 别名注解
作用目标: 类,字段
@XStreamImplicit 隐式集合
@XStreamImplicit(itemFieldName=”part”)
作用目标: 集合字段
@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器
作用目标: 对象
@XStreamAsAttribute 转换成属性
作用目标: 字段
@XStreamOmitField 忽略字段
作用目标: 字段
Auto-detect Annotations 自动侦查注解
xstream.autodetectAnnotations(true);
自动侦查注解与XStream.processAnnotations(Class[] cls)的区别在于性能.自动侦查注解将缓存所有类的类型.
1. [代码]1.实体类:PersonBean
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("person")
public class PersonBean {
@XStreamAlias("firstName")
private String firstName;
@XStreamAlias("lastName")
private String lastName;
@XStreamAlias("telphone")
private PhoneNumber tel;
@XStreamAlias("faxphone")
private PhoneNumber fax;
//测试一个标签下有多个同名标签
@XStreamAlias("friends")
private Friends friend;
//测试一个标签下循环对象
@XStreamAlias("pets")
private Pets pet;
//省略setter和getter
}
2. [代码]2.实体类:PhoneNumber
@XStreamAlias("phoneNumber")
public class PhoneNumber{
@XStreamAlias("code")
private int code;
@XStreamAlias("number")
private String number;
//省略setter和getter
}
3. [代码]3.实体类:Friends(一个标签下有多个同名标签 )
**
* 用Xstream注解的方式实现:一个标签下有多个同名标签
*@ClassName:Friends
*@Description:TODO 5个name 中国,美国,俄罗斯,英国,法国
*http://blog.csdn.net/menhuanxiyou/article/details/5426765
*/
public static class Friends{
@XStreamImplicit(itemFieldName="name") //itemFieldName定义重复字段的名称,
/*<friends> <friends>
<name>A1</name> <String>A1</String>
<name>A2</name> 如果没有,则会变成 =====> <String>A1</String>
<name>A3</name> <String>A1</String>
</friends> </friends>
*/
private List<String> name;
public List<String> getName() {
return name;
}
public