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를 스프링 컨테이너라 함
'백앤드 개발 > Java & Spring' 카테고리의 다른 글
[Spring boot] 서블릿, JSP을 활용한 MVC 패턴 (0) | 2023.11.14 |
---|---|
[Java] 참조형 변수 (0) | 2023.11.07 |
[Spring boot] 회원, 주문 프로젝트 - 객체 지향 원리 적용 (0) | 2023.11.07 |
[Spring boot] 회원, 주문 프로젝트 - 설계 및 구현 (0) | 2023.11.06 |
[Spring boot] JPA와 스프링 데이터 JPA (0) | 2023.10.31 |