반응형
스프링 컨테이너의 다양한 설정 형식
- 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다.
- 자바 코드, XML, Groovy 등등
XML 설정 사용
- XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다.
- 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="com.devhistory.springcoreprinciple.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="memberRepository" class="com.devhistory.springcoreprinciple.member.MemoryMemberRepository"/>
<bean id="orderService" class="com.devhistory.springcoreprinciple.order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
<bean id="discountPolicy" class="com.devhistory.springcoreprinciple.discount.RateDiscountPolicy"/>
</beans>
- XML 설정 파일에서 빈 조회
@Test
void xmlAppContext() {
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}
애노테이션 기반 자바 코드 설정 사용
- 스프링 설정 파일을 따로 관리할 필요가 없다.
- XML 기반 설정에서는 각 분류별(컨트롤러, 비즈니스 로직)로 설정 파일을 따로 관리하는 경우도 있었다. 파일이 나뉘어져 있어 컨테이너에 등록되는 빈, 설정들을 모두 파악하는 것은 많은 어려움이있다.
- 반면 자바 코드 기반으로 설정을 관리하면 빈, 설정들을 파악하기 용이하다.
- XML 설정에 비해 설정의 변경이 용이하다.
- 지금은 XML 설정에서도 IDE의 도움을 받아 비교적 편하게 설정을 할 수 있을지도 모르나, 애플리케이션을 작성하는 언어와 설정을 할때 사용하는 언어를 동일한 언어로 하는 것이 보기에 직관적이고 간편하다.
- 그리고 의존관계도 파악하기 쉽다. XML 기반 설정에서는 단순 텍스트로 되어있어 해당 클래스가 다른 클래스와 어떤 관계를 갖는지 알 수 없다.
- 컴파일 에러를 얻을 수 있다.
- XML 기반으로 설정을 할 때, 빈의 이름이나 패키지명, 타입 등이 오타가 나면 발견하기 까다롭다.
- 그러나 자바 코드로 설정을 구성하면 컴파일러가 미리 문제점을 발견해줄 수 있다.
- 애노테이션 기반 자바 코드 설정 정보
@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } }
new AnnotationConfigApplicationContext(AppConfig.class)
을 통해 스프링 컨테이너에 설정정보를 등록할 수 있다.
정리
- XML 기반의 스프링 설정 정보와 자바 코드로 된 설정 정보를 비교해보면 거의 비슷하다는 것을 알 수 있다.
- XML 기반으로 설정하는 것은 소스 코드의 컴파일없이 설정 정보를 변경할 수 있다는 장점이 있으나, 애노테이션 기반 자바 코드 설정 사용에 비해 얻는 이점이 미약하여 최근에는 잘 사용되지 않는다.
반응형
'Java > Spring Framework' 카테고리의 다른 글
[스프링 핵심 원리 - 기본편] 싱글톤 컨테이너, 싱글톤 방식의 주의점 (0) | 2021.08.18 |
---|---|
[스프링 핵심 원리 - 기본편] 스프링 빈 설정 메타 정보 - BeanDefinition (0) | 2021.08.15 |
[스프링 핵심 원리 - 기본편] 스프링 빈 조회 (0) | 2021.08.14 |
[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용(2) (0) | 2021.08.11 |
[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용(1) (0) | 2021.08.10 |
[참고자료]
스프링 핵심 원리 - 기본편, 김영한
Spring 3 — XML 없이 Java만 사용해서 설정하기
[Spring] XML 설정보다 Java 설정을 사용해야 하는 이유