달력

072010  이전 다음

바쁘신 몸 Rod Johnson이 오랜만에 포스팅을 했다.

@Configuration
public class MyConfig {
   @Bean
   public Person rod() {
      return new Person("Rod Johnson");
   }

   @Bean(scope = Scope.PROTOTYPE)
   public Book book() {
      Book book = new Book("Expert One-on-One J2EE Design and Development");
      book.setAuthor(rod())// rod() method is actually a bean reference !
      return book;
   }
}


뒤따르는 설명이 잘 흡수가 안되어서 그려본 그림

사용자 삽입 이미지


이보다 더 직관적일 수 있는 설명은 아래의 XML 설정과 같은 효과를 낸다는 점이다.
<bean id="rod" class="Person" scope="singleton">
   <constructor-arg>Rod Johnson</constructor-arg>
</bean>

<bean id="book" class="Book" scope="prototype">
   <constructor-arg>Expert One-on-One J2EE Design and Development</constructor-arg>
   <property name="author" ref="rod"/>
</bean>


자바를 설정을 위한 internal DSL로 쓴 것이다. EJB 3.0 스타일의 애노테이션과 구분되어 보이는 것은 Spring의 the non-invasive promise를 지키려 했다는 점이다. 위의 자바 코드는 XML 설정과 마찬가지로 오직 설정을 위한 코드일 뿐이며, 도메인의 내용과는 물리적으로 분리되어 있다.

XML로 설정하는 것에 비해 얻을 수 있는 장점은 IDE의 리팩토링 지원, 자바의 상속과 가시성을 활용할 수 있다는 점이다. 특히. 리팩토링 활용은 확실히 끌리는 메리트다.

원문의 장점 소개

더 흥미로운 점은 XML과 자바로 작성한 설정을 마음대로 섞어서 사용할 수 있다는 점이다. 만일, 선호가 다른 둘 이상의 개발자가 설정을 관리한다면.. ^^

사용자 삽입 이미지

리모컨 쓸 사람은 리모컨... 로타리1 좋아하면 로타리.. 이 얼마나 해피한 공존인가.. ^^
공존을 가정하면, XML에서 자바 DSL로 만든 설정을 부르기 위해서는 아래와 같은 코드가 필요하다.
<beans>

<bean class="..MyConfig"/>

<bean class="org.springframework.beans.factory.java.ConfigurationPostProcessor"/>

<bean class="SomeRandomBean">
       <property
</bean>

</beans>


자바 DSL을 직접 부르는 방안도 제공한다.

ApplicationContext oneConfig = new  AnnotationApplicationContext(SimpleConfiguration.class.getName());
ApplicationContext aBunchOfConfigs = new AnnotationApplicationContext("**/configuration/*Configuration.class");


  1. 80년대 '드드드득' 소리를 내며 회전시켜서 채널을 선택하던 방식 [본문으로]
Posted by 영회