Spring JavaConfig이 @Configuration애노테이션으로 변신해서 Spring에 통합된 후에 가장 아쉬웠던 것은 JavaConfig에서는 가능했던 전용 ApplicationContext이 존재하지 않는다는 점이었다. @Configuration이 적용된 자바 클래스 설정만을 사용할 수 있는 간단한 방법이 없었다.

그래서 이런 저런 방법을 이용해서 @Configuration 설정만을 가진 ApplicationContext를 만들어보는 시도도 해봤다.

하지만 이제는 그런 복잡한 방법을 거치지 않고 단독으로 @Configuration 설정만을 사용하는 ApplicationContext를 만들 수 있다. RC2에 추가된 ConfigurationClassApplicationContext를 이용하면 된다.

아래와 같이 자바 클래스로 된 스프링 설정 정보가 있다고 하면,

@Configuration
static class Config {
    @Bean
    public TestBean testBean() {
        TestBean testBean = new TestBean();
        testBean.name = "foo";
        return testBean;
    }
}

이를 사용하는 컨텍스트는 다음과 같이 만들면 된다.

ConfigurationClassApplicationContext ctx =  new ConfigurationClassApplicationContext(Config.class);

생성자에는 하나 이상의 @Configuration 클래스를 사용할 수 있다.

또 다음과 같이 설정을 추가할 수도 있다.

ctx.addConfigurationClass(ConfigWithCustomName.class);

 

@Configuration을 이용한 설정의 특징은 설정정보를 담은 @Configuration 오브젝트 자체가 빈으로도 등록된다는 점이다. 그렇다면 빈 이름은 어떻게 될까? 사실 알 이유는 없다. 빈의 이름을 지정하도록 만들지 않은 것을 봐도 알 수 있듯이, 컨텍스트 설정 이후에 이 @Configuration 빈을 다시 가져다 사용할 필요는 없다. 그래도 호기심에 한번 읽어보고 싶다면 설정용 클래스의 이름을 이용하면 된다. 내부적으로는 BeanDefinitionReaderUtils.BeanDefinitionReaderUtils() 메소드를 이용해서 빈의 이름을 자동으로 생성한다.

 

그렇다면 @Configuration 방식의 컨텍스트만을 가진 애플리케이션을 만들 수 있을까? 만들고자하면 안될 이유는 없겠지만 별로 장점이 없다. 다만 계층형 구조로 컨텍스트를 구성하는 경우에 한 계층은 ConfigurationClassApplicationContext를 사용할 수 있을 것이다. 취향대로 쓰면 될 듯. 웹용으로 사용할 수 있도록 만든 ConfigurationClassWebApplicationContext도 있다.

Related posts:

  1. Spring 3.0 (56) @Bean 사용의 주의사항
  2. Spring 3.0 (58) Static Class를 XML없이 빈으로 등록하기
  3. Spring 3.0.2 모듈/라이브러리 의존관계
  4. Spring 3.0.2 모듈 의존관계
  5. Spring 3.0 (35) Spring 3.0 Reference Document 공개
  6. Spring 3.0 (53) Spring Dependency Matrix 업데이트
  7. Spring 3.0 (7) Spring 3.0 Dependency Matrix
  8. Spring 3.0 (33) JavaConfig의 통합과 변신. 메타-빈(meta-bean) 개념의 등장.
  9. Spring 3.0 EL (Spel)을 이용한 AssertThrows 확장 (1)
  10. Spring 3.0 (38) Spring Reference 업데이트
  11. 미리 보는 Spring 3.0.1의 변경사항
  12. Spring 2.0의 XML확장기능 (2)
  13. Spring 3.0 (46) Spring 3.0 M4 릴리스
  14. Spring 상식퀴즈 (1) – DI 태클하기 해답편
  15. InsideSpring (1) Annotated Factory Method (@Configuration)을 쓰는 4가지 방법 (2)

Facebook comments: