항상 자바코드로 작성하고 @Configuration 달면 간단하게 설정이 끝났는데 xml 형식으로 설정하는 법도 알아야 한다고 해서 나름의 삽질 끝에 정리해봤다.
@Configuration
public class AppConfig {
@Bean
public MemoryMemeberRepository memberRepository() {
return new MemoryMemeberRepository();
}
@Bean
public MemberService memberService() {
return new MemberServiceImple(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscount();
}
}
이를 XML 형식으로 동일하게 옮겨보면 아래와 같다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="memberService" class="hello.core.member.MemberServiceImple">
<constructor-arg name="mr" ref="memberRepository" />
</bean>
<bean id="memberRepository" class="hello.core.member.MemoryMemeberRepository" />
<bean id="orderService" class="hello.core.order.OrderServiceImpl">
<constructor-arg name="mr" ref="memberRepository" />
<constructor-arg name="dp" ref="DiscountPolicy" />
</bean>
<bean id="DiscountPolicy" class="hello.core.discount.RateDiscount" />
</beans>
스프링 빈에 등록될 때의 id값은 메소드 명으로 등록이 된다. 그러므로 xml에서 <bean> 태그에 id 값은 자바 코드 버전의 설정에서 메소드 이름들을 따와서 지정해주면 된다.
생성자의 인자가 있을 경우에는 <bean> 태그 내에 <constructor-arg> 태그를 인자의 갯수만큼 추가해주면 된다. name와 ref 속성을 지정해줘야하는데 먼저 ref는 xml 설정 파일내에 빈의 id 값을, name에는 생성자의 변수명을 주면 된다.
@Bean
public MemberService memberService() {
return new MemberServiceImple(memberRepository());
}
<bean id="memberService" class="hello.core.member.MemberServiceImple">
<constructor-arg name="mr" ref="memberRepository" />
</bean>
MemberRepository를 넣어줘야 하니 ref에는 MemberRepository의 id값인 memberRepository를 넣어준다.
name에는 생성자에서 받는 인자의 이름을 넣어주면 된다. 나는 MemberRepository 클래스의 생성자를 보면
넘겨받을 인자의 이름을 mr로 해놨다. 그래서 xml 설정파일에서 memberService의 생성자 태그의 name 값으로 mr을 주었다.
어디서 삽질했을지는 말 안해도 뻔한...ㅎㅎ
'백엔드 > 스프링' 카테고리의 다른 글
프론트 컨트롤러 패턴 (0) | 2021.08.17 |
---|---|
Http Request 데이터 형식 정리 (0) | 2021.08.17 |
스프링 빈 스코프 (0) | 2021.08.13 |
스프링 빈 등록 총정리 (0) | 2021.08.13 |
스프링 리액트 연동 Rest API 써보기 (0) | 2021.03.28 |