XML: 텍스트 파일이기에 다루기 쉬우며, 쉽게 이해할 수 있다, 컴파일과 가튼 별도의 빌드 작업도 존재하지 않으며, 오브젝트의 관계가 바뀌는 경우에도 빠르게 변경사하을 반영하는 것이 가능.
@Configuration 은 <beans>
@Bean 은 <bean>
빈이 이름 : @Bean 메소드 이름이 빈의 이름, getBean()에서 사용된다.
빈의 클래스 : 빈오브젝트를 어떤 클래스를 이용해서 만들지를 정의한다.
빈의 의존 오브젝트 : 빈의 생성자나 setter메소드를 통해 의존 오브젝트를 넣어주며, 의존 오브젝트도 하나의 빈이기에 이름이 있고, 그 이름에 해당하는 메소드를 호출해서 의존 오브젝트들을 가져온다. 더 이상 의존하고 있는 오브젝트가 없는 경우 생략 가능
빈 설정 파일
자바코드 설정정보 @Configuration
XML 설정 정보 <beans>
빈 이름
자바코드 설정정보 @Bean methodName()
XML 설정 정보 <beans id = "methodName">
빈의 클래스
자바코드 설정정보 return new BeanClass();
XML 설정 정보 class = "abc.BeanClass"> - 메소드의 리턴 타입을 사용하는 것이 아닌 패키지를 포함한 클래스 이름을 넣어준다.
setter메소드는 프로퍼티가 되며 프로퍼티의 이름은 set을 제외한 나머지 부분의 이름을 사용한다.
<property>를 사용하여 오브젝트와의 관계를 정의 한다. property는 name과 ref라는 두개의 애트리뷰트를 갖는다.
@Bean은 <bean> 태그로 메소드이름은 id attribute로, new 에 사용하는 클래스 이름은 class attribute로 대응해서 전환한다.
@Ben -----------------------> <bean
public ConnectionMaker
connectionMaker(){ --------------------> id = "connectionMaker"
return new DConnectionMaker(); ----> class= "springbook....DConnectionMaker"/>
setter메소드를 사용해 의존관계주입을 선호한다. 이유는 xml로 의존관계 정보를 만들 때 편리하다.
자바빈의 관례를 따라서 setter메소드는 property가 된다. property의 이름은 메소드 이름에서 set을 제외한 나머지 부분을 사용한다.
XML에서는 <property> 태그를 사용해 의존 오브젝트와의 관계를 설정한다. property태그는 두개의 attribute를 갖는다. name은 property의 이름이며 이를 통해여 setter메소드를 알 수 있다. ref는 setter 메소드를 통해 주입해줄 오브젝트의 빈 이름이다.
DI할 오브젝트 역시 빈이며, 그 빈의 이름을 지정해주면 된다.
userDao.setConnectionMaker(connectionMaker());
userDao빈의connectionMaker property를 이요해 의존관계 정보를 주입한다는 뜻이다. 메소드의 파라미터로 넣는 conncetionMaker()는 connectionMaker() 메소드를 호출해서 리턴하는 오브젝트를 주입하라는 의미이다. 이 두 정보를 통해 <property>의 name attribute와 ref attribute로 지정해주면 다음과 같다.
userDao.setConnectionMaker(connectionMaker());
<property name="connectionMaker" ref="connectionMaker"/>
이렇게 완성된 property 태그를 userDao빈을 정의한 <bean> 태그 안에 넣어주면
<bean id = "useDoa" class="springbook.dao.userDao">
<property name="connectionMaker" ref = "connectionMaker"/>
</bean>
<beans>로 전환한 두 개의 <bean> 태그를 감싸주면 DaoFactory로 부터 XML로의 전환작업이 끝난다.
<beans>
<bean id = "connectionMaker" class = "springbook.user.dao.DConnectionMaker" />
<bean id = "userDao" class ="springbook.user.dao.UserDao">
<property name="connectionMaker" ref="connectionMaker"/>
</bean>
</beans>
<property> 태그의 name attribute는 DI 에 사용할 setterMethod의 property 이름이며, ref attribute는 주입할 오브젝트를 정희한 빈의 ID이다. property의 이름과 DI되는 빈의 이름이 같은 경우가 많으며, 주입할 빈 오브젝트의 인터페이스를 따르는 경우가 많다. 만약 빈의 이름을 변경하였다면 property의 ref 값도 변경해주어야 한다.
같은 인터페이스를 구현한 의존 오브젝트를 여러개 정의해두고 그중에서 원하는 걸 고라서 DI하기도 한다.
각 빈의 이름을 독립적으로 만들어 둔뒤 ref attribute를 이용해 DI 받을 빈을 지정해주면 된다.
<beans>
<bean id="localDBConnectionMaker" class="...LocatDBConnectionMaker"/>
<bean id="testDBConnectionMaker" class="...TestDBConnectionMaker"/>
<bean id="producltionDBConnectionMaker" class="...ProductionDBConnectionMaker"/>
<bean id="userDao" class="springbook.user.dao.UserDao">
<property name="connnectionMaker" ref="localDBConnnectionMaker" />
</bean>
</beans>
개발용 PC에서는 XML을 사요하다 테스트 장비나 운영서버에서는 ref 값을 다르게 지정한 xml 파일을 사용하면 된다.
※ DTD와 스키마
DTD 사용의 경우 <beans> 엘리먼트앞에 다음과 같은 DTD tjsdjs
<!DOCTYPE beans PUBLIC "-//SPRING......>
스키마 사용시
<beans xmlns="http://www.springframework.org/schema/bean"...../>
'IT > Spring' 카테고리의 다른 글
토비 스프링 - 테스트 (0) | 2019.10.19 |
---|---|
REST API (0) | 2019.10.15 |
토비 스프링 - 의존관계 주입 (0) | 2019.10.13 |
토비 스프링 - IoC (0) | 2019.10.13 |
토비 스프링 - 패턴, 객체 지향 (0) | 2019.10.12 |
댓글