1. XML 설정
-. Spring Application Context 는 XML에 담긴 DI정보를 활용할 수 있다.
-. DI정보가 담긴 XML파일은 <beans> 를 루트 엘리먼트로 사용. 하위로 <bean>을 다수 정의 가능
-. XML 설정은 @Configuration( <beans> ) 과 @Bean( <bean> ) 이 붙은 자바클래스로 만든 설정과 동일
ㄱ. 빈의 이름 : @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다
<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 의 변경
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보다는 스키마를 사용하는 편이 바람직하다.
'토비의 스프링3 > 1장_오브젝트와 의존관계' 카테고리의 다른 글
1장 오브젝트와 의존관계(4) - 의존관계주입(Dependency Injection) (0) | 2016.04.27 |
---|---|
1장 오브젝트와 의존관계(3) - 싱글톤 & 스코프 (0) | 2016.04.08 |
1장 오브젝트와 의존관계(2) - IoC(Inversion Of Control) (0) | 2016.02.17 |
1장 오브젝트와 의존관계(1) - 스프링 (0) | 2016.02.01 |