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