본문 바로가기

토비의 스프링3/1장_오브젝트와 의존관계

1장 오브젝트와 의존관계(5) - XML 설정

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. XML 설정

-. Spring Application Context 는 XML에 담긴 DI정보를 활용할 수 있다.

-. DI정보가 담긴 XML파일은 <beans> 를 루트 엘리먼트로 사용. 하위로 <bean>을 다수 정의 가능

-. XML 설정은 @Configuration( <beans> ) 과 @Bean( <bean> ) 이 붙은 자바클래스로 만든 설정과 동일

 

-. 하나의 @Bean 메소드를 통해 얻을 수 있는 Bean의 DI 정보

ㄱ. 빈의 이름 : @Bean 메소드 이름이 빈의 이름이다. 이 이름은 getBean() 에서 사용된다.

ㄴ. 빈의 클래스 : 빈 오브젝트를 어떤 클래스를 이용해서 만들지를 정의한다.

ㄷ. 빈의 의존 오브젝트 : 빈의 생성자나 수정자 메소드를 통해 의존 오브젝트를 넣어준다. 의존 오브젝트는 하나 이상일 수도 있다.

 

 

클래스 설정과 XML설정의 대응항목

 

 자바 코드 설정정보

XML 설정정보 

  빈 설정파일

  @Configuration

  <beans>

  빈의 이름

  @Bean methodName()

  <bean id="methodName"

  빈의 클래스

  return new BeanClass();

  class="a,b,c... BeanClass"> 

 

주의점 : <bean> 태그의 클래스 attribute에 지정하는 것은 자바 메소드에서 오브젝트를 만들 때 사용하는 클래스 이름이다. 메소드의 리턴타입을 클래스 attribute에 사용하지 않도록 한다. XML에서는 리턴하는 타입을 지정하지 않아도 된다.

 

 

<util:properties id="config" location="classpath:config.properties"/> 를 메소드의 <bean> 태그 전환 

 

@Bean(name="config") --------------------------------> <bean id
public PropertiesFactoryBean getProperties(){ ---------->  class="org.springframework...PropertiesFactoryBean"
    PropertiesFactoryBean bean = new PropertiesFactoryBean();
    String confActiveProfiles = "config.properties";
    bean.setLocation(new ClassPathResource(confActiveProfiles)); ---->  location="classpath:config.properties"
    return bean;
}

 

 

-. XML 에서는 <property> 태그를 사용해 의존 오브젝트와의 관계를 정의

ㄱ. <property> 태그는 name 과 ref 라는 두 개의 attribute 를 갖는다.

ㄴ. name은 프로퍼티의 이름이다.

ㄷ. ref 는 수정자 메소드를 통해 주입해줄 오브젝트의 빈 이름이다.

ㄹ. name attribute 는 DI에 사용할 수정자 메소드의 프로퍼티 이름이며. ref attribute는주입할 오브젝트를 정의한 빈의 ID다

 

userDao.setConnectionMaker(connectionMaker()); 의존관계 주입된 메소드 호출을 XML의 태그로 전환

 

<bean id="userDao"  class="spring.... UserDao">

<property name="connectionMaker" ref="connectionMaker" />

</bean>

 

만약 connectionMaker 빈을 myConnectionMaker로 변경시 userDao 빈의 connectionMaker 프로퍼티 ref 값도 같이 변경해줘야 한다.

connectionMaker 빈을 DI하는 DAO가 여러 개라면 모두 변경해야한다.

 

<beans>

<bean id="myConnectionMaker" class="spring... DConnectionMaker");

 

<bean id="userDao"  class="spring.... UserDao">

<property name="connectionMaker" ref="myConnectionMaker" />

</bean>

</beans>

bean 의 이름과 참조 ref 의 변경

 

 

※ DTD 와 스키마

 

XML 문서는 미리 정해진 구조를 따라서 작성됐는지 검사할 수 있다. XML 문서의 구조를 정의하는 방법에는 DTD와 스키마(schema)가 있다. 스프링의 XML 설정파일은 이 두 가지 방식을 모두 지원한다.


DTD를 사용할 경우에는 <beans> Element 앞에 다음과 같은 DTD선언을 넣어준다.
<!DOCTYPE beans PUBLIC .-//SPRING//DTD BEAN 2.0//EN.
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">


스프링은 DI를 위한 기본 태그인 〈beans>, <bean> 외에도 특별한 목적을 위해 별도의 태그를 시용할 수 있는 방법을 제공한다. 이 태그들은 각각 별개의 스키마 파일에 정의되어 있고 독립적인 네임스페이스를 사용해야만 한다.

따라서 이런 태그를 사용하려면 DTD 대신 네임스페이스가 지원되는 스키마를 사용해야 한다. <beans>태그를 기본 네임스페이스로 하는 선언은 다음과 같다.

 

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://www.springfrramework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


특벌한 이유가 없다면 DTD보다는 스키마를 사용하는 편이 바람직하다.