2009. 9. 14. 19:59

[Spring 3.0] 스프링 3.0 의 새로운 기능과 향상된 기능 / New Features and Enhancements in Spring 3.0

원문: 
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch02.html
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch02s02.html
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch02s03.html
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch02s04.html
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch02s05.html

스프링 프레임워크를 사용해 본 적이 있다면, 스프링에 두 번의 주요한 수정이 있었다는 것을 알 것입니다. 2006년 10월의 스프링 2.0 릴리즈와 2007년 11월 스프링 2.5 릴리즈 입니다. 이제 세 번째 오버홀 결과인 스프링 3.0을 위한 때입니다.(It is now time for a third overhaul resulting in Spring 3.0)

Java SE 와 Java EE 지원

이제 스프링 프레임워크는 Java 5 를 기반으로 하며, Java 6 가 완전히 지원됩니다.

게다가, 스프링은 J2EE 1.4 와 Java EE 5 와 호환되며, Java EE 6 를 약간 지원합니다.

Java 5

generic, varargs 를 포함한 Java 5 의 기능을 이용하기 위해 전체 프레임워크 코드가 변경되었습니다. 이전의 코드와 호환되도록 최선을 다했습니다. 전과 같은 방법으로 generic Collection 과 Map, generic FactoryBean, 스프링 AOP API의 bridge 메소드를 사용할 수 있습니다.(We now have consistent use of generic Collections and Maps, consistent use of generic FactoryBeans, and also consistent resolution of bridge methods in the Spring AOP API) generic ApplicationListener 는 자동으로 특정 타입의 이벤트만 받습니다. TransactionCallback, HibernateCallback과 같은 모든 콜백 인터페이스는 이제 generic 결과 값을 선언합니다. 전체적으로 스프링 핵심 코드가 이제 Java 5 에 맞게 변경되고 최적화 되었습니다. 

Java 5 의 java.util.concurrent 기능과의 긴밀한 통합을 위해 스프링의 TaskExecutor abstraction 이 갱신되었습니다. We provide first-class support for Callables and Futures now, as well as ExecutorService adapters, ThreadFactory integration, etc. This has been aligned with JSR-236 (Concurrency Utilities for Java EE 6) as far as possible. 게다가 새로운 @Async 어노테이션(또는 EJB 3.1 의 @Asynchronous 어노테이션)을 통한 비동기적 메소드 호출도 지원합니다.

향상된 문서(Improved Documentation)

스프링 레퍼런스 문서도 스프링 3.0 의 새로운 기능과 변화를 반영하도록 변경되었습니다. 오류 없는 문서를 만들기 위해 노력했지만, 몇 가지 에러가 있을 수 있습니다. 오타나 심각한 오류를 발견하시면 이슈를 등록하여 스프링 팀에게 오류를 알려 주시기 바랍니다.

새로운 튜토리얼(New getting started tutorial)

기본적인 스프링 3.0 MVC 웹 어플리케이션을 개발을 시작할 수 있는 새로운 튜토리얼이 추가되었습니다. 이 튜토리얼은  스프링 문서에 있는 것과 별개의 문서입니다.

참고:

이 문서는 아직 볼 수 없습니다. 스프링 3.0 최종 릴리즈에서 볼 수 있을 것입니다.

새로운 모듈 구성과 빌드 시스템(New module organization and build system)

프레임워크 모듈이 변경되었고, 이제 모듈의 jar 마다 별개의 소스 트리로 관리됩니다.

  • org.springfremework.aop

  • org.springfremework.beans

  • org.springfremework.context

  • org.springfremework.context.support

  • org.springfremework.expression

  • org.springfremework.instrument

  • org.springfremework.jdbc

  • org.springfremework.jms

  • org.springfremework.orm

  • org.springfremework.test

  • org.springfremework.transaction

  • org.springfremework.web

  • org.springfremework.web.portlet

  • org.springfremework.web.servlet

이제 스프링 웹 플로우 2.0 에서 알려진 새로운 빌드 시스템을 사용합니다. 이 시스템이 제공하는 것은 아래와 같습니다.

  • ivy 기반의 "스프링 빌드" 시스템

  • 일관된 배포 절차

  • 일관된 의존 관계(dependency) 관리

  • 일관된  OSGi manifest 생성

참고:

거의 모든 프레임워크가 포함된 spring.jar 아티팩트는 더 이상 제공되지 않습니다.

새로운 기능 개요(Overview of new features)

스프링 3.0 의 새로운 기능 목록 입니다. 이 장의 후반부에서 이 기능에 대해 좀 더 자세히 다룰 예정입니다.

  • Spring Expression Language

  • IoC 향상/Java 기반의 bean 메타데이터

  • 스프링 웹 서비스 프로젝트에서 가져온 Object 에서 XML 로의 매핑 기능(OXM)

  • 포괄적인 REST 지원

  • @MVC 추가

  • 선언적 모델 검증

  • Java EE 6 에 대한 초기 지원

  • 임베디드 데이터베이스 지원

Java 5 를 위해 갱신된 핵심 API(Core APIs updated for Java 5)

BeanFactory 인터페이스는 가능하면 정해진 타입의 빈 인스턴스를 반환합니다:

  • T getBean(String name, Class<T> requiredType)

  • Map<String, T> getBeansOfType(Class<T> type)

이제 스프링의 TaskExecutor 인터페이스는 java.util.concurrent.Executer 를 상속받습니다:

  • 상속받은 AsyncTaskExecutor 표준 Callables with Futures 을 지원합니다.

새로운 Java 5 기반의 converter API 와  SPI:

  • stateless ConversionService 와 Converter

  • superseding 표준 JDK PropertyEditors

Typed ApplicationListener<E>

Spring Expression Language

스프링에는 통합 EL 과 문법이 비슷하지만 훨씬 더 많은 기능을 제공하는 expression language 가 있습니다. expression language 는 XML 이나 어노테이션 기반의 빈을 정의할 때 사용되고, 스프링 포트폴리오를 지원하는 expression language의 기반으로서 제공 됩니다.(The expression language can be used when defining XML and Annotation based bean definitions and also serves as the foundation for expression language support across the Spring portfolio) 이 새로운 기능에 대한 자세한 내용은 Spring Expression Langauge(SpEL) 장에서 볼 수 있습니다.

Spring Expression Language 는 스프링 포트폴리오의 모든 제품에서 사용될 수 있는 하나의 expression language 를 스프링 커뮤니티에 제공하기 위해 만들어 졌습니다. 이클립스 기반의 스프링 소스 툴 수트에서의 코드 완성과 같은 스프링 포트폴리오 제품의 요구사항에 의해 이 언어의 기능이 정해 졌습니다. 

아래는 몇 가지 데이터베이스의 속성을 설정하기 위해 Expression Language 를 사용하는 방법을 보여주고 있습니다. 

<bean class="mycompany.RewardsTestDatabase">    <property name="databaseName"        value="#{systemProperties.databaseName}"/>    <property name="keyGenerator"        value="#{strategyBean.databaseKeyGenerator}"/></bean>

어노테이션을 사용하여 컴포넌트를 설정하는 것도 가능합니다.

@Repository public class RewardsTestDatabase {    @Value("#{systemProperties.databaseName}")    public void setDatabaseName(String dbName) { … }    @Value("#{strategyBean.databaseKeyGenerator}")    public voidsetKeyGenerator(KeyGenerator kg) { … }}

IoC 컨테이너(The Inversion of Control container)

자바 기반의 빈 메타데이터(Java based bean metadata)