AppConfig
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(new MemoryMemberRepository(), new RateDiscountPolicy());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
//return new FixDiscountPolicy()
}
}
- @Configuration : 설정 정보라는 것을 의미
- @Bean : @Bean을 붙이면 스프링 컨테이너에 Bean으로 등록됨
public class MemberApp {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = ac.getBean("memberService", MemberService.class);
Member member = new Member(1, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
}
}
스프링 컨테이너
- 위에서 사용한 ApplicationContext가 스프링 컨테이너임
- ApplicationContext는 인터페이스임
- 스프링 컨테이너는 AppConfig처럼 애플리케이션의 제어권을 가지고 의존관계 주입을 해주는 역할을 함
- @Configutation이 붙은 AppConfig를 어플리케이션의 설정 정보로 활용하여 Bean을 등록하고 의존관계를 형성함
- @Bean이 붙은 메서드의 메서드 명을 Bean이름으로 등록함 (빈 이름은 각각 달라야 함)
- getBean() 메서드로 스프링 컨테이너에 등록된 Bean을 찾아올 수 있음
- getBean(빈 이름, 타입) / getBean(타입)
BeanFactory <- ApplicationContext <- AnnotationConfigApplicationContext(Java설정 클래스 사용)
<- GeneralXmlApplicationContext(XML 설정 파일 사용)
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- Bean관리, 조회, getBean() 메서드 제공
ApplicationContext
- BeanFactory + 부가기능
BeanDefinition
- xml, java설정 정보를 활용하여 BeanDefinition을 만듦
- 스프링 컨테이너는 BeanDefinition을 보고 Bean을 등록함 => 스프링 컨테이너는 설정 정보가 xml인지, java인지 몰라도도 되고 BeanDefinition에만 의존함
'WEB > spring' 카테고리의 다른 글
[Spring] 컴포넌트 스캔, @ComponentScan, @AutoWired (0) | 2021.04.16 |
---|---|
[Spring] 싱글톤 패턴, 싱글톤 컨테이너, CGLIB (0) | 2021.04.15 |
[Spring] 제어의 역전(IoC), 의존관계 주입(DI), 컨테이너 (0) | 2021.04.15 |
[Spring] 어플리케이션 Java설정 클래스 (0) | 2021.04.15 |
[Spring] Java 다형성을 활용한 설계와 한계 (0) | 2021.04.15 |