Spring의 스프링 컨테이너, @Configuration, @Bean 정리
# 인프런 김영한의 스프링 핵심 원리 - 기본편을 개인적으로 정리한 글입니다.
정리
Q. @Configuration이 뭐야?
DI컨테이너 역할을 하는 AppConfig를 Spring에서 관리하겠다고 선언할때 @Configuration을 넣는다.
@Configuration
public class AppConfig {
// public MemberService memberService(){
// return new MemberServiceImpl(new MemoryMemberRepository());
// }
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
다음과 같이 memberService는 memberRespository를 가지고 있는 MemberServiceImpl을 생성하고
memberRespository는 MemoryMemberRepository를 가지고 있다. //객체지향 설계 원칙중 DIP, OCP를 위반하지 않음.
Q. Bean은 뭐야?
스프링 컨테이너 속에 등록된 객체 //거의 @Configuration 내에 등록된 객체들을 @Bean으로 처리한다.
Q. 스프링 컨테이너가 뭐야?
ApplicationContext를 의미하며, @Configuration과 @Bean이 붙은 객체를 모두 호출해서 저장하는 장소
public static void main(String[] args){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
<App개발시 applicationContext에서 getBean을 통해 bean을 불러와 개발이 이루어짐>
// AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
<실무에서는
@Configuration과 @Bean이 저장된 ApplicationContext를 불러오고 싶으면
applicationContext의 구현체인
AnnotationConfigApplicationContext를 사용하여 개발하자.>
이전에는 개발자가 필요한 객체를 AppConfig 를 사용해서 직접 조회했지만,
현재부터는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾아야 한다.
//스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.
기존에는 개발자가 직접 자바코드로 모든 것을 했다면
이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고,
스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.