김영한 아저씨의 인프런 강의를 들었다. spring 핵심원리에서 처음에는 자바만으로 코드를 짰는데 이제 spring으로 변환한다고 한다!! 변환하는 과정을 공부해보자!
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 RateDiscountPolicy();
}
}
이렇게 하면 Bean이 스프링 컨테이너에 등록을 해주게 된다.
다음은 main이 들어있는 MemberApp에서!
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
얘네를 지워버리고,
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); //appconfig의 환경설정 정보를 가지고 관리해준다.
//기존에는 appconfig에서 직접 찾아왔는데 이제는 스프링 컨테이너를 통해 찾아온다.
MemberService memberService=applicationContext.getBean("memberService", MemberService.class); //(""에는 메서드 이름,class)
이렇게 변환해준다.
원래는 appConfig에서 직접 찾게되는데 bean을 등록했기 때문에 스프링 컨테이너를 통해서 찾아온다.
이대로 실행하게 되면 beanFactory가 Bean등록한 애들을 다 찾아준다.
ApplicationContext를 스프링 컨테이너라고 한다.
이 컨테이너는 @configuration이 붙은 appconfig를 설정 정보로 사용하고, @bean 이라고 적힌
메서드를 호출해 반환된 객체를 스프링 컨테이너에 등록한다.
스프링 빈은 @Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다.
이제부터는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾아야 한다. 스프링 빈은applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.
기존에는 개발자가 직접 자바코드로 모든 것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로
등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.
스프링 컨테이너가 관리해준다는 것의 장점이 엄청나다!
'BackEnd > Spring' 카테고리의 다른 글
Spring Legacy Project 생성하기 (2) | 2022.05.11 |
---|