스프링으로 전환하기
AppConfig에 @Configuration과 @Bean 추가
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
public class MemberApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
...
}
}
public class OrderApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
// OrderService orderService = appConfig.orderService();
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
...
}
}
ApplicationContext : 스프링 컨테이너
AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제는 스프링 컨테이너를 통해 사용
스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성)정보로 사용한다.
여기서 @Bean이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.
이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
스프링 빈은 @Bean이 붙은 메서드 명을 스프링 빈의 이름으로 사용(memberService, orderService)
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
스프링 컨테이너를 통해 필요한 스프링 빈(객체)을 applicationContext.getBean() 메서드를 사용해서 찾아야 한다.
기존에는 개발자가 직접 자바코드로 모든 것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.
스프링 컨테이너를 사용할 때 어떤 장점이 있을까?
인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다.
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'스프링 Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[스프링 컨테이너와 스프링 빈] 컨테이너에 등록된 모든 빈 조회 (0) | 2022.02.02 |
---|---|
[스프링 컨테이너와 스프링 빈] 스프링 컨테이너 생성 (0) | 2022.02.02 |
[스프링 핵심 원리 이해2 - 객체 지향 원리 적용] IoC, DI, 그리고 컨테이너 (0) | 2022.02.01 |
[스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2022.02.01 |
[스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 전체 흐름 정리 (0) | 2022.02.01 |
댓글