참조: http://www.epril.com/resources/spring3/reference/html/ch02.html

요약 및 편역합니다.

2.1 자바 5

전페 프레임워크 코드를 제네릭, 가변인수(varargs) 같은 자바 5 기능을 사용하도록 수정했다. FactoryBean, 스프링 AOP, ApplicationListener 코드에 제네릭을 활용했다. 또한, TrasactionCallback과 HibernateCallback과 같은 콜백 인터페이스들은 제네릭한 결과를 반환하도록 수정했다. 스프링 코어 코드베이스를 전반적으로 자바 5에 최적화 시켰다.

스프링의 TaskExecutor 추상화 계층을 자바 5의 java.util.concurrent 시설과 밀접하게 통합되도록 수정했다. JSR-236(자바 EE 6 Concurrency Utilies)에 포함되어 있는 Callable, Future, ExecutorService 어댑터, ThreadFactory 연동 등을 지원한다. 또한 (EJB 3.1 @Asynchronous 또는) @Async 애노테이션을 사용하여 비동기 메서드 호출도 지원한다.

2.2. 개선한 문서

추가된 기능에 맞게 3.0 문서 작업을 새로 했고, 검증을 했지만 그래도 틀린 부분이 있다면 이슈를 등록해 달라.

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

다음과 같은 모듈로 새롭게 개정했고 소스 트리당 모듈.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

* 더 이상 모든 구성요소를 담고 있던 spring.jar는 제공하지 않는다.

새로운 스프링 빌드 시스템을 사용한다. 그 시스템은 다음 기능을 제공한다.

      Ivy 기반 "스프링 빌드" 시스템
      일관된 배포 절차
      일관된 의존성 관리
      일관된 OSGi manifest 생성

2.4. 새로운 기능 살펴보기

다음은 스프링 3.0이 새롭게 제공하는 기능이다. 이 기능들을 자세히 살펴보겠다.

      Spring Expression Language
      IoC enhancements/Java based bean metadata
      Object to XML mapping functionality (OXM) moved from Spring Web Services project
      Comprehensive REST support
      @MVC additions
      Declarative model validation
      Early support for Java EE 6

2.4.1. 자바 5에 맞게 핵심 API 업데이트

BeanFactory 인터페이스가 타입에 맞는 빈을 반환한다.

      T getBean(Stringname, Class<T> requiredType)
      Map<String, T> getBeansOfType(Class<T> type)

스프링의 TaskExecutor 인터페이스가 java.util.concurrent.Executor를 상속 받는다.

      AsyncTaskExecutor를 확장하여 표준 Callables와 Futures를 지원한다.

새로운 자바 5 기반의 converter API와 SPI
 
      stateless ConversionService와 Converters
      표준 JDK PropertyEditor 대체제

타입을 가지고 있는 ApplicationListener<E>

2.4.2. 스프링 EL(Expression Language)

스프링은 통합 EL과 비슷한 EL을 토입했다. EL은 XML 정의와 애노테이션 기반 빈 설정에서 사용할 수 있다. 이 기능에 대한 자세한 설명은 Spring Expression Language (SpEL).장을 참조하라.

스프링 EL은 모든 스프링 포트폴리오 제품에서 사용할 수 있는 단일 EL을 제공하기 위해 만들었다.

다음은 데이터베이스 설정 프로퍼티에 EL을 사용하는 예제다.

<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) { … }
}

2.4.3. IoC 컨테이너

2.4.3.1. 자바 기반 빈 메타데이타

JavaConfig 프로젝트의 몇몇 핵심 기능을 스프링 프레임워크로 가져왔다. 즉 다음의 애노테이션을 직접 사용할 수 있다는 뜻이다.
   
      @Configuration
      @Bean
      @Primary
      @Lazy
      @Import
      @Value

다음은 JavaConfig 기능을 사용하는 기본적인 빈 설정 예제다.

@Configuration
public class AppConfig{
    private @Value("#{jdbcProperties.url}") String jdbcUrl;
    private @Value("#{jdbcProperties.username}") String username;
    private @Value("#{jdbcProperties.password}") String password;

    @Bean
    public FooService fooService() {
        return new FooServiceImpl(fooRepository());
    }

    @Bean
    public FooRepository fooRepository() {
        return new HibernateFooRepository(sessionFactory());
    }

    @Bean
    public SessionFactory sessionFactory() {
        // wire up a session factory using
        // AnnotationSessionFactoryBean
        asFactoryBean.setDataSource(dataSource());
        return (SessionFactory) asFactoryBean.getObject();
    }

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource(jdbcUrl, username, password);
    }
}

이 것이 동작하게 하려며 애플리케이션 컨텍스트 XML 설정 파일에 다음과 같이 컴포넌트 스캔을 추가한다.

<context:component-scan
    base-package="com.myco.config"/>
 
2.4.3.2. 애노테이션을 활용한 팩토리 빈 정의

FactoryBean은 스프링 컴포넌트 정의와 표준 컴포넌트-스캔 기술을 사용한 등록 방식으로 정의할 수 있다. 자세한 내용은 Factory Bean Definitions
using annotations
을 참조하라.

2.4.4. Data 단

스프링 웹 서비스 프로젝트에서 객체(Object)를 XML로 맵핑하는 기능(OXM)을 스프링 프레임워크로 가져왔다, 이 기능은 org.springframework.oxm 패키지에 들어있다. OXM의 자세한 사용법은 Marshalling XML using O/X Mappers를 참조하라.

2.4.5. Web 단

웹 단에서 가장 흥미로운 새 기능은 RESTful 웹 서비스와 웹 애플리케이션 지원 기능이다. 또한 새로운 애노테이션도 사용할 수 있다.

2.4.5.1. 방대한 REST 지원

RESTful 애플리케이션을 만드는 서버쪽 지원은 기존의 MVC 웹 프레임워크에서 주도적인 역할을 하는 애노테이션에 대한 확장 기능으로 제공한다. 클라이언트쪽 지원은 RestTemplate 클래스로 제공한다. 이 둘 모두 HttpConverter를 사용하여 객체와 그것에 대한 HTTP 요청과 응답 사이를 변환 해준다.

MarhsallingHttpMessageConverter는 앞서 언급한 Object to XML 맵핑 기능을 사용한다.

자세한 내용은 REST support를 참조하라.

2.4.5.2 @MVC additions

@CookieValue와 @RequestHeaders 애노테이션이 추가됐다. Mapping cookie values with the @CookieValue annotationMapping request header attributes with the @RequestHeader annotation을 참조하라.

2.4.6 선언적인 모델 검증

하이버네이트 검증기, JSR 303

작업중... 스프링 3.0 M3 배포에 포함되어 있지 않다.

2.4.7 발빠른 자바 EE 6 지원

새로운 애노테이션 @Async (or EJB 3.1's @Asynchronous 애노테이션)을 사용하여 비동기 메서드 호출을 지원한다.

JSF 2.0, JPA 2.0, 기타 등등

작업중... 스프링 3.0 M3 배포에 포함되어 있지 않다.