2012. 2. 22.

Spring Configuration Metadata

BeanDefinition 과 BeanDefinitionReader
  • 스프링의 설정 메타정보는 BeanDefinition 인터페이스로 표현되는 순수한 추상 정보이다.
  • ApplicationContext 는 BeanDefinition으로 만들어진 오브젝트를 사용해 IoC/DI작업을 수행한다.
  • 즉, 스프링 메타정보는 특정한 파일포맷이나 형식에 종속되지 않는다.
  • BeanDefinitionReader는 특정 포맷을 BeanDefinition 오브젝트로 만들어준다.
  • 즉, 특정한 포맷을 위한 BeanDefinitionReader 만 구현하면, 어떤형태도 사용가능하다.
Java code 로 작성된 configuration metadata
  • java 클래스를 bean factory 가 사용할 수 있는 본격적인 설정정보를 만들 수 있다.
  • 실질적으로 application context 는 ApplicationContext 타입의 object 로 구현되며, @Configuration이 붙은 자바코드를 설정정보로 사용하려면 AnnotationConfigApplicationContext 를 이용하면서 파라미터로 @Configuration으로 지정된 클래스를 넣어주면 된다.
설정용 Object Factory
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
..
@Configuration // application context or beanfactory 가 사용할 설정 정보임을 표시
public class DataFactory {
    @Bean // object 생성을 담당하는 IoC 용 method 임을 표시
    public UserDao userDao() {
        return new UserDao(connectionMaker());
    }
    @Bean
    public ConnectionMaker connectionMaker() {
        return new DConnectionMaker();
    }
}
ApplicationContext
2) application context
public class UserDaoTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
        UserDao dao = context.getBean("userDao", UserDao.class); // method 이름이 bean 의 이름이 된다.
}
XML 을 이용한 configuration metadata
  • DI 구성이 바뀔때마다 자바코드(오브젝트 팩토리)를 수정하고 클래스를 다시 컴파일 하는 것은 귀챦은 작업이다.
  • XML 은 다루기 쉽고, 이해하기 쉽고, 별도의 빌드 작업이 필요없다.
  • 클래스 설정과 XML설정의 대응항목
     자바코드XML설정
    빈 설정파일@Congifuration<beans>
    빈의 이름@Bean methodName()<bean id="methodName"
    빈의 classreturn new BeanClass();class="a.b.c…BeanClass" /> <-- package 포함
  • Spring 개발자는 setter method 를 선호하는데, 이는 XML의존관계 정보를 만들때 편리하기 때문이다.
  • 즉, java bean의 관례에 따라서 setter method 는 property 가 된다.
  • 프로퍼티 이름은 method이름에서 set을 제외한 나머지 부분을 사용한다.
    • 예를들어, object에 setConnectionMaker()란 이름의 method 가 있다면 connectionMaker라는 프로퍼티를 갖는다고 할수 있다.
  • XML에서는 <property> 태그를 이용해서 의존 오브젝트와의 관계를 정의한다.
    • <property> 태그의 속성 중 name은 프로퍼티이름으로 setter method 를 추적한다.
    • <property> 태그의 속성 중 ref는 setter method를 통해서 주입해줄 오브젝트의 bean 이름이다. 즉, DI할 오브젝트이다.
UserDao setter를 이용하여 변경
public class UserDao {
    private ConnectionMaker connectionMaker;
     
    public UserDao() {
    }
     
    // setter method DI의 전형적인 코드
    public void setConnectionMaker(ConnectionMaker connectionMaker) {
        this.connectionMaker = connectionMaker;
    }
}
ApplicationConfiguration.xml
<?xml version="1.0" encoding="UTF-8"?>
 
    <bean id="myConnectionMaker" class="com.lefthand.user.dao.DConnectionMaker" />
    <bean id="userDao" class="com.lefthand.user.dao.UserDao" >
        <property name="ConnectionMaker" ref="myConnectionMaker" />
    </bean>
</beans>

댓글 없음:

댓글 쓰기