스프링 프레임워크 3.0의 새로운 기능 및 향상된 기능
Java SE와 Java EE 지원
스프링 프레임워크는 Java 5 기반이고, Java 6를 완전하게 지원함.
스프링은 J2EE 1.4와 Java EE 5와 호환되며, Java EE 6를 일찍부터 지원함.
1. Java 5
- 제너릭(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. 새로운 모듈 구조와 빌드 시스템
2.1. 새로운 모듈 구조
프레임워크 모듈을 수정하여, 모듈 jar별로 하나의 소스트리로 분리해서 관리함.
org.springframework.aop
org.springframework.beans
org.springframework.context
org.springframework.context.support
org.springframework.expression
org.springframework.instrument
org.springframework.jdbc
org.springframework.jms
org.springframework.orm
org.springframework.oxm
org.springframework.test
org.springframework.transaction
org.springframework.web
org.springframework.web.portlet
org.springframework.web.servlet
org.springframework.web.struts
2.2. 새로운 빌드 시스템
ex) 스프링 웹 플로우(Web Flow) 2.0
- Ivy 기반의 스프링 빌드 시스템
- 일관된 배포 과정
- 일관된 의존성 관리
- 일관된 OSGi manifest 생성
참고
전체 프레임워크를 대부분 포함하고 있는 spring.jar artifact는 더 이상 제공하지 않음.
3. 새로운 기능
3.1. Java 5를 위한 코어 API 업데이트
BeanFactory 인터페이스는 가능한한 타입이 있는 빈을 리턴함.
T getBean(Class<T> requiredType)
T getBean(String name, Class<T> requiredType)
Map<String, T> getBeansOfType(Class<T> type)
스프링의 TaskExecutor 인터페이스는 java.util.concurrent.Executor를 상속받음.
- 상속받은 AsyncTaskExecutor는 표준 Callable와 Future를 지원한다.
Java 5 기반의 새로운 변환 API와 SPI
- 무상태 ConversionService와 Converters
- 표준 JDK PropertyEditors 대체함.
타입이 있는 ApplicationListener<E>
3.2. 스프링 표현 언어(SpEL)
- 스프링의 표현 언어는 일반적인 EL과 문법적으로는 유사하지만 훨씬 더 많은 기능을 제공함.
- 표현언어는 XML 및 애노테이션 기반의 빈 정의에 사용할 수 있음.
- 스프링 포트폴리오에서 표현 언어를 지원하기 위한 토대가 됨.
- 스프링 표현 언어는 스프링 포트폴리오의 모든 제품에서 잘 지원하는 하나의 표현언어를 스프링 커뮤니티에 제공할 목적으로 만들어 짐.
- 스프링 포트폴리오에 있는 프로젝트의 요구사항을 기반으로 하여 기능이 만들어 짐. (이클립스 기반의 STS 내에서의 코드 자동완성 기능도 포함됨)
아래는 데이터베이스 설정의 프로퍼티 설정에 대한 예시임.
3.3. 제어의 역전(IoC) 컨테이너
자바 기반 빈 메타데이터
JavaConfig 프로젝트로부터 일부 핵심기능이 스프링 프레임워크에 추가됨. 아래 애노테이션을 직접 지원함.
@Configuration
@Bean
@DependsOn
@Primary
@Lazy
@Import
@ImportResource
@Value
아래는 새로운 JavaConfig 기능을 사용해서 기본적인 설정을 제공하는 자바 클래스의 예제임.
이 설정이 동작하게 하려면 애플리케이션 컨텍스트 XML 파일에 컴포넌트 스캔을 추가해야 함.
또는 AnnotationConfigApplicationContext를 직접 사용하는 @Configuration 클래스를 사용할 수 있음.
컴포넌트안에서 빈 메타데이터 정의
3.4. 범용적인 타입 컨버전(형 변화) 시스템 및 필드 포맷 시스템
3.5. 데이터 계층
3.6. 웹 계층
포괄적인 REST 지원
@MVC 추가
3.7. 선언적인 모델 검증
3.8. Java EE 6를 위한 조기 지원
3.9. 임베디드 데이터베이스 지원