`

Annotation Xml 持久化

阅读更多
import java.io.IOException;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "jmeld")
public class JMeldSettings {
	// class variables:
	public static JMeldSettings instance;

	// Instance variables:
	@XmlElement(name = "editor")
	private String editor = "editor";
	@XmlElement(name = "filter")
	private String filter = "filter";
	@XmlElement(name = "folder")
	private String folder = "folder";

	public JMeldSettings() {
	}

	public static synchronized JMeldSettings getInstance() {
		if(instance == null) {
			synchronized(JMeldSettings.class) {
				if(instance == null) {
					instance = new JMeldSettings();
				}
			}
		}
		
		return instance;
	}
	
	/**
	 * Save a configuration to a file.
	 */
	public void save(JMeldSettings configuration) throws JAXBException, IOException {
		JaxbPersister.getInstance().save(configuration);
	}
	
	public static void main(String[] args) {
		try {
			getInstance().save(getInstance());
		} catch(JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch(IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class JaxbPersister {
	// class variables:
	private static JaxbPersister instance = new JaxbPersister();

	// instance variables:
	private Map<Class, Context> contexts = new HashMap<Class, Context>();

	private JaxbPersister() {
	}

	public static JaxbPersister getInstance() {
		return instance;
	}

	/**
	 * Load a object of type 'clazz' from a file.
	 */
	public <T> T load(Class<T> clazz, File file) throws FileNotFoundException, JAXBException {
		return load(clazz, new FileInputStream(file));
	}

	/**
	 * Load a object of type 'clazz' from a file.
	 */
	public <T> T load(Class<T> clazz, InputStream is) throws JAXBException {
		Context context;
		T object;

		context = getContext(clazz);
		synchronized(context) {
			object = (T) context.unmarshal(is);
			return object;
		}
	}

	/**
	 * Save an object to a file.
	 */
	public void save(Object object) throws JAXBException, IOException {
		OutputStream os;
        File file = new File("JMeldSettings.xml");
		os = new FileOutputStream(file);
		save(object, os);
		os.close();
	}

	/**
	 * Save a object to a outputstream.
	 */
	private void save(Object object, OutputStream os) throws JAXBException, IOException {
		Writer writer;
		Context context;

		writer = new OutputStreamWriter(os);

		context = getContext(object.getClass());
		synchronized(context) {
			context.marshal(object, writer);
		}
	}

	/**
	 * Each class has it's own context to marshal and unmarshal. The context
	 * contains a jaxbcontext.
	 */
	private Context getContext(Class clazz) {
		Context c;

		synchronized(contexts) {
			c = contexts.get(clazz);
			if(c == null) {
				c = new Context(clazz);
				contexts.put(clazz, c);
			}
		}

		return c;
	}

	class Context {
		private JAXBContext jaxbContext;
		private Marshaller marshaller;
		private Unmarshaller unmarshaller;

		Context(Class clazz) {
			try {
				jaxbContext = JAXBContext.newInstance(clazz);

				marshaller = jaxbContext.createMarshaller();
				marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
				marshaller.setSchema(null);

				unmarshaller = jaxbContext.createUnmarshaller();
				unmarshaller.setSchema(null);
			} catch(JAXBException e) {
				e.printStackTrace();
			}
		}

		public void marshal(Object object, Writer writer) throws JAXBException {
			marshaller.marshal(object, writer);
		}

		public Object unmarshal(InputStream is) throws JAXBException {
			return unmarshaller.unmarshal(is);
		}
	}
}

 

两个类,将内存中的xml信息持久化入文件

分享到:
评论

相关推荐

    12xml序列化器

    在实际项目中,XML序列化器可以用于保存应用状态、持久化数据、在网络请求中传递数据等场景。使用一个简洁的库可以极大地提高开发效率,同时减少错误的可能性。"12xml序列化器"作为一个专为Android设计的工具,可能...

    Hibernate组件映射(annotation/xml)

    在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和XML配置两种方式,以帮助开发者更好地理解和应用这...

    struts2_1_8spring3hibernate3_5_1_annotation_XML都有

    Hibernate是Java领域的一个持久化框架,主要用于数据库操作。在Hibernate3.5.1版本中,注解(@Entity、@Table、@Id等)可以用来标注实体类和属性,实现ORM(对象关系映射)。同时,Hibernate也可以通过hibernate.cfg....

    Hibernate Annotation 中文文档

    以上是对Hibernate Annotation的简要介绍,深入理解和熟练应用这些注解,将有助于提升你在Java持久化领域的专业技能。对于更详细的用法和高级特性,建议查阅《Hibernate Annotations参考文档-3.20》这份资料,以获取...

    基于Java的Hibernate MySQL数据持久化示例设计源码

    本设计源码提供了一个基于Java的Hibernate MySQL数据持久化示例。项目包含47个文件,主要使用Java编程语言。文件类型包括30个Java源代码文件、13个XML配置文件、2个Properties配置文件、1个Git忽略文件和1个Markdown...

    Hibernate一对一双向外键关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...

    Hibernate多对多单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的关系映射类型,它用于表示两个实体之间可以有多个对应的关系。本篇将详细讲解如何使用Hibernate实现多对多单向关联,包括注解(Annotation)...

    序列化与反序列化用友U8所需的XML

    在IT领域,序列化与反序列化是两个关键的概念,特别是在数据存储、网络传输和对象持久化中。这里我们关注的是用友U8系统中的XML序列化和反序列化。用友U8是一款广泛应用于企业管理的ERP(企业资源计划)系统,而XML...

    Hibernate一对多(多对一)双向关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-...通过注解或XML配置,开发者可以灵活地定义实体间的关联,实现数据的持久化。同时,注意级联操作、懒加载策略等细节,能够有效优化应用性能。

    Hibernate多对多双向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是常见的关系映射类型,尤其在处理数据库中的复杂关系时显得尤为重要。本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解...

    Spring定时调度——将调度信息持久化到数据库中

    本篇文章将探讨如何在Spring中实现定时调度,并将调度信息持久化到数据库中,这在实际业务场景中非常重要,因为能够确保任务的稳定性和可管理性。 首先,我们需要理解Spring的定时任务调度机制。Spring提供了`@...

    Hibernate多对一单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对一的单向关联是一种常见的关系映射方式,它主要用于处理数据库中两个实体间的一种关联关系。在这种关系中,一个实体(多个实例)可以与另一个实体(单个实例)相关联。本文将...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    annotationProcessor实例demo

    5. **持久化更新**:如果你的处理器需要在不同编译周期之间保持状态,可以使用`ProcessingEnvironment`中的`Options`来存储信息。这在处理复杂的元数据模型时非常有用。 6. **测试与使用**:为了确保处理器正确工作...

    hibernate4.3.8的annotation及xml的一对多的双向案例

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了强大的对象关系映射(ORM)功能,使得开发者可以通过面向对象的方式操作数据库。本案例主要探讨的是Hibernate 4.3.8版本中如何使用注解和XML配置实现...

    Java Annotation详解

    工具可以分析注解并自动生成代码、XML 文件等,如生成序列化代码、持久化代码、客户端代码等。 ### 结论 Java Annotation 提供了一种强大的机制,让开发者能够更有效地管理代码,减少模板代码,提高代码的可读性...

    Hibernate一对多单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对多关系是常见的实体关联类型,表示一个实体可以与多个其他实体相关联。在本教程中,我们将探讨如何使用注解和XML配置实现Hibernate的一对多单向关联。 首先,让我们理解一对多...

    Hibernate-Annotation中文教程.pdf

    * 不需要定义持久化类对应的*.hbm.xml 文件,直接以注解方式写入在持久化类中来实现。 * 提供一种强大及灵活的方法来声明持久性映射。 要使用 Hibernate Annotation,您至少需要具备 Hibernate 3.2 和 Java 5。可以...

    hibernate annotation api chm文件

    Hibernate是一个流行的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。在Hibernate 3.3版本中,引入了Annotation API,这是一种更加直观、简洁的方式来声明对象-...

Global site tag (gtag.js) - Google Analytics