반응형
해당 글을 보면 AppConfig라는 자바 코드로 빈 등록을 해서 사용을 했다.
하지만 스프링은 자바 코드 뿐 아니라 xml 방식을 지원하고 있고, 커스텀 방식도 지원하고 있다.
간단하게 알아 보자.
아래 그림은 ApplicationContext의 구현체들이다.
AnnotationConfigApplicationContext는 AppConfig라는 자바 코드에서 애노테이션 기반으로 빈을 등록할 때 사용 했던 구현체이다.
이번에 알아볼 내용은 xml방식으로 빈을 등록하는 방법이다.
xml 방식으로 빈 등록하기
기존 자바 코드 설정 방식 살펴 보기
아래와 같이 자바 코드로 빈을 등록한 코드이다. AnnotationConfigApplicationContext(AppConfig.class); 로 등록을 한다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
public class MemberApp {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = ac.getBean("memberService", MemberService.class);
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("member = " + member.getName());
System.out.println("findMember = " + findMember.getName());
}
}
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">
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="memberRepository" class="hello.core.member.MemoryMemberRepository"/>
</beans>
단점과 장점
- 장점 : 컴파일이 필요없으므로 배포 시 편하다.
- 단점 : 가독성이 떨어진다, 오타율이 높다.(에러날 확률이 높음)
알아야 할 것
자바 코드로 등록하고, xml 코드로 등록하는 방법이 중요한 것이 아니다.
스프링이 유연하게 여러 설정 방식을 제공
하고, 커스텀 방식도 제공 한다는 것을 알아야 한다.
스프링 빈을 등록해서 사용하는 장점은 정말 많다고 하는데 이런 점도 사용해야 하는 이유 중 하나가 되는 것이다.
만약 스프링 빈으로 등록하여 사용하지 않는다면, 설정 방식을 바꾸려면 별도로 구현을 해주어야 하기 때문이다.
반응형
'Spring' 카테고리의 다른 글
스프링의 @Configuration과 싱글톤의 관계 (0) | 2022.01.14 |
---|---|
스프링의 BeanDefinition (0) | 2022.01.14 |
스프링의 자바 코드와 XML 설정 방식 (0) | 2022.01.10 |
스프링의 BeanFactory와 ApplicationContext의 차이 (0) | 2022.01.10 |
스프링의 ApplicationConetxt란?? (0) | 2022.01.10 |