스프링의 다양한 설정 형식
스프링 컨테이너는 다양한 형식으로 설정 정보를 받아들일 수 있다.
대표적으로 어노테이션 기반 형식, XML 기반 형식이 있고, 필요에 따라 직접 설정 형식을 만들어 사용할 수도 있다.
어노테이션 기반 자바 설정 코드
현재 가장 많이 사용되는 설정 형식으로, 이전까지 사용하던 AnnotationConfigApplicaionContext를 말한다.
AnnotationConfigApplicaionContext 클래스를 사용하면서 자바 코드로 된 설정 정보(AppConfig.class)를 넘긴다.
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
설정 정보 클래스(AppConfig)에는 @Configuration 어노테이션이, 클래스 메서드에는 @Bean 어노테이션을 붙여 빈을 등록한다.
@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
}
XML 파일 기반 설정 사용
XML 기반 설정은 최근 스프링 부트를 많이 사용하면서 잘 사용하지 않지만, 아직 이를 사용하는 레거시 프로젝트들도 있기 때문에 알아두면 좋다.
XML 기반 설정은 XML 파일을 통해 스프링을 설정하는 방법으로, 컴파일 없이 XML파일 변경만으로 설정 정보를 변경할 수 있다는 특징이 있다.
XML 기반으로 설정한 스프링 컨테이너를 사용하는 예시는 다음과 같다. 테스트 클래스로 작성하였다.
public class XmlAppContext {
@Test
void xmlAppContext() {
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}
}
XML 기반의 스프링 컨테이너는 new GenericXmlApplicationContext("appConfig.xml"); 을 이용해 생성한다.
생성자에 전달하는 xml 파일 경로는 프로젝트 경로의 resources 폴더 기준이다.
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="memberRepository" class="hdxian.hdxianspringcore.member.MemoryMemberRepository"/>
<bean id="discountPolicy" class="hdxian.hdxianspringcore.discount.RateDiscountPolicy"/>
<bean id="memberService" class="hdxian.hdxianspringcore.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="orderService" class="hdxian.hdxianspringcore.order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
</beans>
예제 코드에 사용된 xml 설정 파일이다. 클래스 기반과 형식이 다를 뿐, 구성은 거의 비슷하다.
<bean> 태그에 스프링 빈에 대한 정보를 전달한다.
id는 빈 이름(설정 클래스의 메서드 이름), class는 빈의 실제 구현 클래스(설정 클래스의 메서드가 실제 return하는 객체)를 지정한다.
<constructor-arg> 태그를 통해 의존관계를 주입한다.
'[inflearn] 스프링 핵심 원리 - 기본편 > 섹션 4 - 스프링 컨테이너와 스프링 빈' 카테고리의 다른 글
4-9. 싱글톤 패턴 (0) | 2024.04.08 |
---|---|
4-8. BeanDefinition (0) | 2023.11.28 |
4-6. BeanFactory와 ApplicationContext (2) | 2023.11.27 |
4-5. 스프링 빈 상속 관계 (0) | 2023.11.18 |
4-4. 동일 타입 빈 조회 (0) | 2023.11.18 |