오봉이와 함께하는 개발 블로그
Spring - 스프링 핵심 원리 이해2 - 5(객체 지향 원리 적용) 본문
728x90
스프링으로 전환
- 순수한 자바 코드만으로 DI를 적용했지만, 스프링으로 전환하자.
AppConfig 스프링으로 변경
@Configuration
public class AppConfig {
@Bean
public MemberSerivce memberSerivce() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
- @Configuration
- 설정을 구성한다는 뜻의 어노테이션
- @Bean
- 스프링 컨테이너에 스프링 빈으로 등록
MemberApp 스프링 컨테이너
public class MemberApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
//// MemberService memberService = new MemberServiceImpl();
// 스프링 사용
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("new member = " + member.getName());
System.out.println("find member = " + findMember.getName());
}
}
OrderApp 스프링 컨테이너
public class OrderApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
// OrderService orderService = appConfig.orderService();
//// MemberSerivce memberSerivce = new MemberServiceImpl();
//// OrderService orderService = new OrderServiceImpl();
// 스프링 사용
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000);
System.out.println("order = " + order);
System.out.println("order.calculatePrice = " + order.calculatePrice());
}
}
스프링 컨테이너
- ApplicationContext를 스프링 컨테이너라 함.
- 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용
- @Bean이라 적힌 메소드를 모두 호출해서 반환된 객체를 컨테이너에 등록
- 스프링 컨테이너에 등록된 객체를 스프링 빈이라 함.
- 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다.(memberService, orderService)
- 이전에는 AppConfig를 통해 직접 조회했지만, 이제부터는 스프링 컨테이너를 통해 스프링 빈(객체)를 찾아야 함
- 스프링 빈은 applicationContext.getBean()을 통해 찾을 수 있음
- @Bean이라 적힌 메소드를 모두 호출해서 반환된 객체를 컨테이너에 등록
- 개발자가 직접 자바코드로 모든 것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고 스프링 컨테이너에서 스프링 빈을 찾아 사용할 수 있도록 변경됨
코드가 복잡해진 느낌인데 스프링 컨테이너를 사용하면 어떤 장점이...?
출처 : 인프런 김영한 지식공유자님의 스프링 완전 정복 로드맵 강의
728x90
'BE > Spring' 카테고리의 다른 글
Spring - 스프링 컨테이너와 빈 - 2(스프링 빈 조회 기본, 동일한 타입 둘 이상) (0) | 2022.06.06 |
---|---|
Spring - 스프링 컨테이너와 빈 - 1(스프링 컨테이너 생성, 컨테이너에 등록된 빈 조회) (0) | 2022.06.05 |
Spring - 스프링 핵심 원리 이해2 - 4(객체 지향 원리 적용) (0) | 2022.06.04 |
Spring - 스프링 핵심 원리 이해2 - 3(객체 지향 원리 적용) (0) | 2022.06.03 |
Spring - 스프링 핵심 원리 이해2 - 2(객체 지향 원리 적용) (0) | 2022.06.02 |
Comments