http://www.infoq.com/presentations/Configuration-in-Spring-3-1

저처럼 서론 보기 귀찮으신 분들은 19분부터 보는 것이 좋습니다.

크게 세 가지로 나눠 볼 수 있을 것 같습니다.

  • Environment 추상화 지원
  • 빈 프로파일 지원
  • @Configuration 강화

자세히 적을 시간이 없어서 대충 보면서 요약한 메모를 그냥 올려두겠습니다. 죄송;;

Environment 지원
- Unified 프로퍼티 관리
- 빈 정의 프로파일

dev -> qa -> staging -> prod

Environment.getProperty(String)

Environment 인터페이스
PropertySource 추상화
- EnvironmentAware 인터페이스
- EnvironmentAwarePropertyPlaceholderConfigurer
- EnvironmentAwarePorpertyOverrideConfigurer
- SpEL 지원
- ProfileResolver

${'prop.key'}
EnvironmentAwarePropertyPlaceholderConfigurer 이걸 쓰면 Environment 적용됨.

#{environment['prop.key']}
EnvironmentAwarePropertyPlaceholderConfigurer 생략 가능.

조건적으로 등록되는 빈 정의(빈 정의 프로파일)
- 개발 단계와 배포 단계가 다를 수도 있지만
- 배포 환경 끼리도 서로 다를 수도 있다.

<beans profile="developmenr">
    <bean ~~ />
</beans>

@Profile("developmenr')
@Component || @Configuration
public class MyComponent {..}

메타 애노테이션으로 활용 가능

java -DspringProfiles="p1,p2...
<context-param>, <init-param>
ConfigurableEnvironment.setActiveProfiles("p1", "p2")

내부 <beans>
- 프로파일 용
- 비슷한 기본값 묶을 때 사용
- 내부 빈끼리는 id 중복 허용
- 하지만 같은 곳에 들어있는 빈끼리는 중복되면 안 됨.

테스트 지원
- MockEnvironment
- MockProperySource

Pitfalls
- QA 단계에서 본 빈 그래프랑 제품 단계 때의 빈 그래프가 다르다.
- 잘못해서 테스트 단계 설정이 배포될 수 있다.
해결책
- 빈 그래프는 같아야 돼. 그냥 속성만 다른건 괜찮아.
- 빌드 시스템 수준에서 안전하게 빌드할 것
- 제품 단계에 개발 단계에 필요한 JAR를 추가하지 말 것.

STS에서 툴 지원
- 내부 <beans/> XML 설정 인식
- 프로파일 가시화

c:namespace
c(onstructor)
p:namespace에 대응하는 것.

자바 기반 앱 설정
- 다른 설정은?
- 컴포넌트 스캔은?

어려운 점
- 스프링 네임스페이스를 매핑하는게 간단하지 않아.
-- purely dclarative
-- Reference 빈 or 메서드
-- DSL in XML

@ComponentScan("패키지")

TestCOntext @Configuration 지원

Groovy 지원

http://maven.springframework.org/snapshots

http://git.springsource.org/sandbox/cbeams.git