Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

스프링 프레임워크 3.0의 새로운 기능 및 향상된 기능

Info
title참고
Tip
titleJava SE와 Java EE 지원

스프링 프레임워크는 Java 5 기반이고, Java 6를 완전하게 지원함.

스프링은 J2EE 1.4와 Java EE 5와 호환되며, Java EE 6를 일찍부터 지원함.

...

  • 제너릭(generic)이나 가변인자(varargs), 그 외 언어적 개선사항 같은 Java 5 기능의 이점을 취하도록 전체 프레임워크 코드를 수정함.
  • 제너릭 컬렉션과 맵의 일관된 사용, 제너릭 팩토리빈(FactoryBean)의 일관된 사용, 스프링 AOP API에서 브릿지 메서드의 일관된 해결책을 제공함.
  • 제너릭 애플리케이션리스너(Generic ApplicationListener)는 자동으로 특정이벤트의 타입만 받음.
  • TransactionCallback과 HibernateCallback같은 모든 콜백 인터페이스는 이제 제너릭 결과값을 선언함.
  • 전반적으로 스프링 핵심코드를 Java 5를 기반으로 새로 작성되고 최적화함.
  • Java 5의 java.util.concurrent와의 닫힌 통합(close integration)을 위해 스프링의 TaskExecutor 추상화를 수정함.
  • ExecutorService 어댑터, ThreadFactory 통합 뿐 아니라 이제 Callable과 Future를 지원하는 퍼스트 클래스(first-class)를 제공함.
  • 가능한 한 JSR-236(Java EE 6을 위한 동시성 유틸리티)과 맞춤.
  • 새로운 @Async 애노테이션(또는 EJB 3.1의 @Asynchronous 애노테이션)으로 비동기 메서드 호출을 지원함.

2. 새로운 모듈 구조와 빌드 시스템

Anchor
2.1
2.1
2.1. 새로운 모듈 구조

프레임워크 모듈을 수정하여, 모듈 jar별로 하나의 소스트리로 분리해서 관리함.

...

  • 스프링의 표현 언어는 일반적인 EL과 문법적으로는 유사하지만 훨씬 더 많은 기능을 제공함. 
  • 표현언어는 XML 및 애노테이션 기반의 빈 정의에 사용할 수 있음.
  • 스프링 포트폴리오에서 표현 언어를 지원하기 위한 토대가 됨.
  • 스프링 표현 언어는 스프링 포트폴리오의 모든 제품에서 잘 지원하는 하나의 표현언어를 스프링 커뮤니티에 제공할 목적으로 만들어 짐.
  • 스프링 포트폴리오에 있는 프로젝트의 요구사항을 기반으로 하여 기능이 만들어 짐. (이클립스 기반의 STS 내에서의 코드 자동완성 기능도 포함됨)

아래는 데이터베이스 설정의 프로퍼티 설정에 대한 예시임.

Gister macro
gistUrlhttps://gist.github.com/ChoiYoungMok/2adcb2b47fa2460b14fdcb0cbe8f97cf

Gister macro
gistUrlhttps://gist.github.com/ChoiYoungMok/9525b1c7b4cb9184868c43951edbc7ae

Anchor
3.3
3.3
3.3. 제어의 역전(IoC) 컨테이너

자바 기반 빈 메타데이터

JavaConfig 프로젝트로부터 일부 핵심기능이 스프링 프레임워크에 추가됨. 아래 애노테이션을 직접 지원함.

  • @Configuration

  • @Bean

  • @DependsOn

  • @Primary

  • @Lazy

  • @Import

  • @ImportResource

  • @Value

아래는 새로운 JavaConfig 기능을 사용해서 기본적인 설정을 제공하는 자바 클래스의 예제임.

Gister macro
gistUrlhttps://gist.github.com/ChoiYoungMok/b8a03f91eabd794bee745bde4d590a01

이 설정이 동작하게 하려면 애플리케이션 컨텍스트 XML 파일에 컴포넌트 스캔을 추가해야 함.

Gister macro
gistUrlhttps://gist.github.com/ChoiYoungMok/cd2f26a4c0d002f12bf3ebe2810edb32

또는 AnnotationConfigApplicationContext를 직접 사용하는 @Configuration 클래스를 사용할 수 있음.

Gister macro
gistUrlhttps://gist.github.com/ChoiYoungMok/84f2ac9521e2f88ef6683aacb4088a37

컴포넌트안에서 빈 메타데이터 정의

  • @Bean 애노테이션을 사용하는 메서드는 스프링 컴포넌트 안에서도 사용할 수 있음.
  • 이 메서드들은 컨테이너에 팩토리 빈을 정의하는 데 기여함.

3.4. 범용적인 타입 컨버전(형

...

변환) 시스템 및 필드 포맷 시스템

  • 범용적인 타입 컨버전(형 변환) 시스템을 도입함.
    • 타입 컨버전을 위해 SpEL로 타입 컨버전 시스템을 사용함.
    • 빈 프로퍼티 값에 바인딩을 할 때 스프링 컨테이너와 DataBinder로 타입 컨버전 시스템을 사용할 수 있음.
  • 필드값을 포맷팅하기 위해 포맷터 SPI를 도입함.
    • 포맷터 SPI는 스프링 MVC와 같은 클라이언트 환경에서 사용하기 위해 JavaBean PropertyEditor를 더욱 간단하고 강력한 대안을 통해 제공함.

3.5. 데이터 계층

  • 스프링 웹 서비스 프로젝트의 객체와 XML을 매핑하는 기능(OXM)은 스프링 프레임워크의 코어로 이동함.
  • 이 기능은 org.springframework.oxm 패키지에서 찾을 수 있음.

3.6. 웹 계층

  • RESTful 웹 서비스와 웹 애플리케이션 구축 지원
  • 웹 애플리케이션에서 사용할 수 있는 새로운 애노테이션 추가

포괄적인 REST 지원

  • 기존의 MVC 웹 애플리케이션 애노테이션을 확장하여 RESTful 애플리케이션 구축을 위한 서버 사이드 지원을 함.
  • JdbcTemplate이나 JmsTemplate과 같은 템플릿 클래스처럼 RestTemplate 클래스를 통해 클라이언트 사이드 지원을 함.
  • MarshallingHttpMessageConverter는 앞에서 이야기 하였던 객체와 XML을 매핑하는 기능(OXM)을 사용함.

@MVC 추가

  • 스프링 MVC 설정을 크게 간소화할 수 있는 mvc 네임스페이스를 도입함.
  • @CookieValue와 @RequestHeaders와 같은 애노테이션을 추가함.

3.7. 선언적인 모델 검증

  • JSR 303 지원을 포함한 여러 유효성 검증을 강화함.
  • 기본 프로바이더로 Hibernate Validator 사용함.

3.8. Java EE 6를 위한 조기 지원

  • 새로운 @Async 애노테이션(또는 EJB 3.1의 @Asynchronous 애노테이션)을 사용하여 비동기 메서드 호출을 지원함.
  • JSR 303, JSF 2.0, JPA 2.0 등등

3.9. 임베디드 데이터베이스 지원

  • HSQL, H2, Derby를 포함한 임베디드 자바 데이터베이스 엔진을 편리하게 지원함.