스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다.
ex ) 자바 코드, XML, Groovy 등등
애노테이션 기반 자바 코드 설정 사용
- 일반적인 스프링 설정 방식이다.
- new AnnotationConfigApplicationContext(AppConfig.class)`
- `AnnotationConfigApplicationContext` 클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.
지금까지 해온 것이니 실습 생략한다.
XML 설정 사용
- 요즘의 스프링 부트에서는 사용하지 않지만, 과거의 레거시 프로젝트에서 주로 사용됨.
- `GenericXmlApplicationContext` 를 사용하면서 `xml` 설정 파일을 넘기면 된다.
<실습>
1. resource에 XML Configuration File > Spring Config파일을 생성
2. 파일명 : appConfig.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.MemberServiceImpl" >
<!--생성자 넘겨줘야함 -> memberRepository로 만들려고 하는데 없으니 아래에서 새로 bean 만들어줌-->
<constructor-arg name="memberRepository" ref="memberRepository" />
</bean>
<!--memberRepository 만들어줌-->
<bean id="memberRepository" class="hello.core.member.MemoryMemberRepository" ></bean>
<bean id="orderService" class="hello.core.order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository" />
<constructor-arg name="discountPolicy" ref="discountPolicy" />
</bean>
<bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy" />
</beans>
3. 다음과 같이 코드 작성하여 bean 생성 야무지게 해준다.
이 방식은 우리가 annotation (bean) 을 사용하는 것과 100% 일치하는 작업이다.
4. TDD 실행
코드는 다음과 같다.
package hello.core.xml;
import hello.core.member.MemberService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import static org.assertj.core.api.Assertions.*;
public class XmlAppContext {
@Test
void xmlAppContext() {
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}
}
5. 결과 확인
Bean이 잘 생성됨을 알 수 있다. > singleton bean으로 생성됐다는 뜻은 싱글톤 방식으로 생성됐다는 것인데 뒤에서 계속..
반응형
'Develop > Spring (이론)' 카테고리의 다른 글
싱글톤(Singleton) 딥다이브 ( Spring 內 싱글톤 컨테이너 비교) (0) | 2023.08.12 |
---|---|
스프링 빈 설정 메타 정보 _ BeanDefinition (0) | 2023.08.11 |
BeanFactory와 ApplicationContext (0) | 2023.08.10 |
Annotatoin 정리 (0) | 2023.06.13 |
Spring이란? (배경 / 중요도) (2) | 2023.06.13 |