본문 바로가기

백앤드 개발/Java & Spring

[Spring boot] 회원, 주문 프로젝트 - 스프링으로 전환

1. AppConfig 변경

@Configuration 을 붙여 스프링 컨테이너에 등록

각 메서드마다 @Bean 을 붙여 스프링 빈으로 등록

...
import
...

@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();
 }
 
}

 

 

2. App 에 컨테이너 적용

...
import
...

public class MemberApp {

 public static void main(String[] args) {
 
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();

// ApplicationContext: 스프링 컨테이너, @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

//applicationContext.getBean(): 스프링 컨테이너를 통해 빈 찾기
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

...

 }
}

 

 

3. 기타 코멘트

- 스프링 컨테이너는 xml 기반으로도 만들 수 있으나 최근은 어노테이션으로 만드는 추세

- 여전히 많은 레거시 프로젝트 들이 XML 기반으로 되어 있음

- 주의: 빈 객체마다 다른 이름을 부여하라 -> 중복시 오류날 수 있음

- 빈팩토리: 스프링 컨테이너 최상위 인터페이스

- ApplicationContext는 BeanFactory의 기능을 상속받으며 빈 관리 기능, 편의 기능을 추가로 상속 받음

- BeanFactory나 ApplicationContext를 스프링 컨테이너라 함