Spring oxm 시작 인스턴스
Spring3.0의 새로운 기능 중 하나는 O/XMapper입니다.O/X 맵이라는 개념은 신선하지 않다. O는 Object를 대표하고, X는 XML을 대표한다.그것의 목적은 자바 대상 (거의 항상 plainoldJavaobject, 또는 약어로 POJO) 과 XML 문서 사이를 왔다 갔다 하는 것이다.
예를 들어, 몇 가지 속성을 가진 간단한 bean이 있을 수 있으며, 업무는 그 Java 대상을 XML 문서로 변환해야 합니다.Spring의 O/XMapper를 사용하면 문제를 해결할 수 있습니다.반대로 XML 문서를 간단한 Javabean으로 변환해야 Spring의 O/XMapper도 감당할 수 있습니다.
한 가지 주의해야 할 것은 SpringO/XMapper는 유행하는 제3자 프레임워크로 이루어진 통일된 인터페이스를 정의할 뿐이다.Spring의 O/X 기능을 사용하려면 Java 객체와 XML을 왔다 갔다 변환하는 유틸리티가 필요합니다.Castor는 바로 이렇게 유행하는 제3자 도구입니다. 본고는 이 도구를 사용할 것입니다.다른 이런 도구는 XMLBeans, JavaArchitectureforXMLBinding(JAXB), JiBX와 XStream을 포함한다.
그룹화 그룹
O/X 매핑을 할 때, 그룹 (marshalling) 과 그룹 (unmarshalling) 이라는 두 용어를 자주 볼 수 있습니다.
그룹이란 Javabean을 XML 문서로 변환하는 과정을 가리키며, 이는 Javabean의 모든 필드와 필드 값이 XML 요소 또는 속성으로 XML 파일에 채워진다는 것을 의미합니다.때때로 그룹도 서열화(serializing)라고 부른다.
예상한 바와 같이 그룹 해제는 그룹과 완전히 상반되는 과정으로 XML 문서를 자바빈으로 변환합니다. 이것은 XML 문서의 모든 요소나 속성이 자바 필드로 자바빈에 채워진다는 것을 의미합니다.때때로 해조도 반서열화(deserializing)라고 부른다.
Spring O/XMapper 의 이점
Spring을 사용하는 O/XMapper의 가장 직접적인 장점 중 하나는 Spring 프레임워크의 다른 특성을 이용하여 구성을 간소화할 수 있다는 것이다.Spring의 bean 라이브러리는 실례화된 O/X 그룹기 주입 (즉 앞에서 언급한 의존항 주입) 을 그룹기 대상을 사용할 수 있도록 지원합니다.다시 한 번 말하지만, 이것은 응용 프로그램의 개발과 배치를 가속화시킬 것이다.
견고한 대상을 향한 디자인 실천에 따라 SpringO/X 프레임워크는 두 개의 인터페이스만 정의한다. 그것이 바로 Marshaller와 Unmarshaller이다. 이것은 O/X 기능을 실행하는 데 사용되는데 이것은 이 프레임워크를 사용하는 또 다른 중대한 장점이다.이러한 인터페이스의 실현은 완전히 독립 개발자에게 개방되어 개발자는 코드를 수정할 필요가 없이 쉽게 전환할 수 있다.예를 들어 처음에 Castor를 사용하여 O/X 변환을 했지만 나중에 필요한 기능이 부족한 것을 발견하면 코드 변경 없이 XMLBeans로 전환할 수 있습니다.새로운 O/X 프레임워크를 사용하려면 Spring 구성 파일을 변경해야 합니다.
Spring을 사용하는 O/XMapper의 또 다른 장점은 통일된 이상 계층 구조입니다.Spring 프레임워크는 데이터 액세스 모듈을 사용하여 만들어진 패턴을 따릅니다. 방법은 원본 이상 대상을 Spring 자체가 O/XMapper를 위해 만든 실행 시 이상에 포장하는 것입니다.제3자 공급자가 던진 원시 이상이 스프링 운행 시 이상에 포장되어 있기 때문에, 당신은 이상이 발생한 근본 원인을 규명할 수 있습니다.이상을 포착하기 위해 코드를 수정할 필요도 없습니다. 이상이 실행될 때 이상에 포장되어 있기 때문입니다.다음 몇 가지 운행 시 기본 이상 XML Mapping Exception: Generic Marshalling Failure Exception, Validation Failure Exception, Marshalling Failure Exception 및 Unmarshalling Failure Exception이 비정상적으로 확장되었습니다.
입문 밤
구성 목록:
applicationContext.xmlSpring 구성 파일
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="oxmDemo" class="com.mdf.springoxm.oxmDemo">
<property name="marshaller" ref="castorMarshaller" />
<property name="unmarshaller" ref="castorMarshaller" />
</bean>
<!-- castor :castor-1.3.2-core.jar,castor-1.3.2-xml.jar -->
<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
<property name="mappingLocation" value="classpath:mapping.xml" />
</bean>
</beans>
그룹과 그룹을 만들 때, 세트로 사용되는 맵핑 형식은 그룹을 풀 때 맵핑을 사용해야만 성공할 수 있습니다. (여기에 의문이 있습니다. 자신의 작법 문제로 인해 맵핑을 통해 포맷 인코딩을 해야만 그룹을 풀 수 있고, 그렇지 않으면 rootelement의 오류를 찾을 수 없습니다.)mapping.xml 파일
<mapping>
<class name="com.mdf.springoxm.Customer">
<map-to xml="Customer"/>
<field name="flag" type="boolean">
<bind-xml name="flag" node="element"/>
</field>
<field name="name" type="string">
<bind-xml name="name" node="element"/>
</field>
<field name="sex" type="string">
<bind-xml name="sex" node="element"/>
</field>
</class>
</mapping>
사용자 정의 Bean 파일Customer.java
package com.mdf.springoxm;
public class Customer {
private String name;
private String sex;
private Boolean flag;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
}
xmlDemo.java 파일
package com.mdf.springoxm;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
public class oxmDemo{
private Marshaller marshaller;
private Unmarshaller unmarshaller;
public Marshaller getMarshaller() {
return marshaller;
}
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
public Unmarshaller getUnmarshaller() {
return unmarshaller;
}
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
public void convertFromObjectToXML(Object object, String filepath)
throws IOException {
FileOutputStream os = null;
try {
os = new FileOutputStream(filepath);
getMarshaller().marshal(object, new StreamResult(os));
}
finally {
if (os != null) {
os.close();
}
}
}
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
try {
is = new FileInputStream(xmlfile);
return getUnmarshaller().unmarshal(new StreamSource(is));
}
finally {
if (is != null) {
is.close();
}
}
}
}
테스트
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mdf.springoxm.Customer;
import com.mdf.springoxm.oxmDemo;
import java.io.IOException;
public class Main {
private static final String XML_FILE_NAME = "customer.xml";
public static void main(String[] args) throws IOException {
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
oxmDemo converter = (oxmDemo) appContext.getBean("oxmDemo");
Customer customer = new Customer();
customer.setName("yiibai");
customer.setFlag(true);
customer.setSex("Haikou haidiandao");
System.out.println("Convert Object to XML!");
//from object to XML file
converter.convertFromObjectToXML(customer, XML_FILE_NAME);
System.out.println("Done
");
System.out.println("Convert XML back to Object!");
//from XML to object
Customer customer2 = (Customer)converter.convertFromXMLToObject(XML_FILE_NAME);
System.out.println(customer2);
System.out.println("Done");
}
}
테스트 결과:
11, 2016 2:27:52 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1221be2: startup date [Wed May 11 14:27:51 CST 2016]; root of context hierarchy
11, 2016 2:27:52 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
: Loading XML bean definitions from class path resource [applicationContext.xml]
11, 2016 2:27:52 org.springframework.oxm.castor.CastorMarshaller afterPropertiesSet
: Configured using [class path resource [mapping.xml]]
Convert Object to XML!
Done
Convert XML back to Object!
com.mdf.springoxm.Customer@b419da
Done
총결산이상은 본고의 스프링oxm 입문 실례에 관한 모든 내용입니다. 여러분께 도움이 되었으면 합니다.관심 있는 친구는 본 사이트의 다른 관련 주제를 계속 참고할 수 있습니다. 부족한 점이 있으면 댓글로 지적해 주십시오.여러분의 본 사이트에 대한 지지에 감사 드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.