728x90
반응형
Intro
본 카테고리는 Inflearn 김영한 강사님의 스프링 핵심 원리 강의를 수강하며 이해하고 학습한 내용을 정리한 내용으로 구성되어 있다.
본 포스팅에서는 객체지향 설계원칙을 적용하여 개발한 순수 자바코드에 Spring을 도입하는 과정을 담았다.
기존 코드
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemberService;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private static MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
private static DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
Spring 적용 코드
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemberService;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
private static MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
private static DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
// return new FixDiscountPolicy();
}
}
차이점
@Bean
어노테이션과 @Configuration
어노테이션을 적용한다.AppConfig
에 설정을 구성한다는 뜻으로 해석된다.
또, 각각의 메서드에 @Bean
을 붙여줌으로써 스프링 컨테이너에 빈으로 등록할 수 있다.
이렇게 등록한 객체인 bean을 ApplicationContext
라이브러리를 통해 사용할 수 있다. (하단참조)
마치며
즉, 다음과 같이 정리할 수 있다.
ApplicationContext
를 Spring Container라 한다.- 스프링 컨테이너는
@Configuration
이 붙은AppConfig
을 설정 정보로 사용함 @Bean
이 적힌 메서드를 모두 호출하여 Spring Container에 Bean으로 등록한다.- 이렇게 등록된 Bean은 등록된 메서드의 이름으로 호출하여 사용될 수 있다.
- 실제로 Spring Container 내부에는 Key-Value 형식으로 methodName-객체 형식으로 저장되어 있다.
applicationContext.getBean()
메서드를 이용하여 bean을 호출할 수 있다.
감사합니다.
728x90
반응형
'Dev > Spring' 카테고리의 다른 글
[스프링 핵심 원리] @Qualifier, @Primary와 Bean 우선순위 (0) | 2023.09.26 |
---|---|
[스프링 핵심 원리] ComponentScan, 의존 관계 자동주입 (0) | 2023.09.26 |
[스프링 핵심 원리] Singleton Pattern of Spring Container (0) | 2023.09.24 |
[스프링 핵심 원리] Spring Container & Bean (0) | 2023.09.22 |
[스프링 핵심 원리] SoC와 DI (0) | 2023.09.20 |