본문 바로가기

스프링

[spring] xml_springOxm_jaxen_castor_1

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.junit : junit

6.     Commons-logging : Spring-context가 사용

7.     Mail : java-mail

8.     Mockito : 목 프레임워크 중 Mockito

9.     Mysql-connector : Mysql JDBC

10.   Org.springframework.context.support : Spring java-mail

11.   Org.springframework.oxm : Spring OXM(Object XML Mapping) Jaxb .

12.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

13.   Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함

14.   Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.

15.   Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.

16.   Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.

17.   Spring-jdbc : 스프링이 지원하는 jdbc.

18.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

19.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

* XML Mapping 추상화 적용

- 자바에는 JAXB외에도 다양한 XML과 자바오브젝트를 매핑하는 기술 <OXM (Object-XML Mapping)> 이 있다.

1) Castor XML : 설정파일이 필요없는 가벼운 바인딩 프레임워크

2) JiBX : 뛰어난 퍼포먼스를 자랑하는 XML 바인딩 기술

3) XmlBeans : 아파치 XML 프로젝트. XML 정보셋을 효과적으로 제공

4) Xstream : 관례를 이용해서 설정이 없는 바인딩을 지원하는 XML 바인딩 기술

- 이렇게 여러 가지 기술이 존재한다는 이야기가 나온다면 서비스 추상화를 떠올려야한다.

- 스프링은 트랜잭션, 메일 전송뿐 아니라 OXM에 대해서도 서비스 추상화 기능을 제공한다.

> 이중 OXM 추상화 서비스 인터페이스에는 자바오브젝트를 XML로 변환하는 Marshaller, 반대로 XML을 자바오브젝트로 변환하는 Unmarshaller가 있다.

> OXM 기술에 따라 Unmarshaller 인터페이스를 구현한 다섯가지 클래스가 있다. 각 클래스는 해당 기술에서 필요로 하는 추가 정보를 빈 프로퍼티르 지정할 수 있게 되어있다.

 

 

Jaxb sql domain

 

 

Jaxb sqlmap domain

 

SpringUnmarshaller을 통해 마샬링/언마샬링을 하기 위해서는 해당 domain ObjectFactory를 생성해줘야 한다. 직접 생성해줘도 되고, Jaxb 컴파일러로 생성해도 됨.

 

 

 

6. Jaxb2Marshaller : JAXB를 이용하도록 만들어진 Unmarshaller Spring 구현 클래스. 이 클래스는 Unmarshaller, Marshaller 인터페이스를 모두 구현하고 있기 때문에 해당 bean 하나로 마샬링, 언마샬링이 모두 가능하다.

7. Jaxb2Marshaller 빈에는 바인딩 클래스(JAXB domain)의 패키지 이름을 지정하는 프로퍼티인 contextPath만 넣어주면 된다.

* 따라서 OXM 기술을 JAXB가 아닌 다른 것으로 바꿔야할 경우 테스트 코드 수정없이 XML 빈 설정만 변경해주면 된다.

 

26. 위에 등록한 unmarshaller 빈은 Unmarshaller 타입이다. 따라서 스프링 컨텍스트의 @Autowired를 이용해 Unmarshaller 타입의 인스턴스 변수를 선언해주면 빈을 가져올 수 있다.

따라서, JAXB API를 사용해서 컨텍스트를 만들어 언마샬러를 생성하는 등의 복잡한 코드를 작성할 필요가 없다.

30. 추상 인터페이스인 Unmarshallerunmarshal() 메소드를 한번 호출해 주기만 하면 모든 번거로운 작업은 Jaxb2Marshaller 빈이 알아서 진행해줄 것이다. XML을 읽어 오브젝트로 변환하는 것은 두 줄이면 충분하다. Source 타입으로 가져올 파일을 지정하는 것 하나와 Unmarshaller 오브젝트의 unmarshal() 메소드를 호출하는 것이 전부다. 변수선언을 없애고 한줄로도 가능.

 

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.org.castor : OXM castor Framework

6.     Com.springsource.junit : junit

7.     Commons-logging : Spring-context가 사용

8.     Mail : java-mail

9.     Mockito : 목 프레임워크 중 Mockito

10.   Mysql-connector : Mysql JDBC

11.   Org.springframework.context.support : Spring java-mail

12.   Org.springframework.oxm : Spring OXM(Object XML Mapping) Jaxb .

13.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

14.   Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

15.   Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

16.   Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

17.   Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

18.   Spring-jdbc : 스프링이 지원하는 jdbc.

19.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

20   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

Castor framework를 이용한 언마샬링 기법

도메인 객체는 그대로 사용하면 된다. 변수와 get메서드만 필요한듯 어노테이션 정보는 필요없음.

 

언마샬링할 XML

 

5. map-to : 생략시 클래스명과 엘리먼트 네임이 일치해야함. 일치 안한다면 엘리먼트 네임 명시.

6. Field : 자식 변수명 xml명 등 정보 명시

 

Unmarshaller 인터페이스를 Castor API를 이용해서 구현한 클래스

 

이처럼 코드는 전혀 바뀌지 않았지만 XML 설정변경 만으로 코드를 유지시켜줌.