[강의] 스프링 핵심 원리 - 기본편2

이나형·2024년 8월 16일
0

Spring 강의(김영한)

목록 보기
2/3
post-thumbnail

이 포스팅은 인프런 강의 중 김영한님의 '스프링 핵심 원리 - 기본편' 중
섹션 3까지의 내용을 정리한 것입니다.
코드 및 사진 이미지 모두 해당 강의를 참고하였습니다.

스프링 핵심 원리 - 기본편 링크



✅스프링으로 전환하기

전 포스팅에서 Appconfig 클래스를 사용함으로서
이 이점에 대해 설명을 했다.

그러나 이는 순수한 java 코드로, spring을 사용하여
관리하기 위해 어노테이션을 붙여 스프링으로 전환하는 작업을 실행했다.



AppConfig 설정 변경하기

//순수 자바 코드로 작성한 Appconfig 코드 일부
public class AppConfig {
 public OrderService orderService() {
 	return new OrderServiceImpl(
 		new MemoryMemberRepository(),
 		new FixDiscountPolicy());
 	}
}
//Spring으로 전환하기 위해 어노테이션을 붙인 Appconfig 코드 일부
@Configuration
public class AppConfig {
@Bean
 public OrderService orderService() {
 	return new OrderServiceImpl(
 		new MemoryMemberRepository(),
 		new FixDiscountPolicy());
 	}
}

이런식으로 Configuration 어노테이션과 Bean 어노테이션을 붙인다.
그러면 @Bean을 붙인 메서드들은 다 스프링 컨테이너에 등록이 된다.


AppConfig 객체를 사용하는 메서드 변경하기

//기존 메서드 코드 일부
AppConfig appconfig = new AppConfig();
MemberService memberService = appconfig.memberService();
//스프링컨테이너를 사용하도록 변경한 코드
//AppConfig appconfig = new AppConfig();
//MemberService memberService = appconfig.memberService();
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

ApplicationContext는 스프링 컨테이너라고 보면 된다. 얘가 앞서 AppConfig에서 붙인 @Bean인 애들을 다 관리해준다고 보면 된다.

그런 다음, new AnnotationConfigApplicationContext(AppConfig.class);로
AppConfig에 있는 환경설정 정보들을 가지고 스프링이
@Bean이 붙은 객체들을 스프링 컨테이너에 넣어서 관리를 해주게 되는 것이다.


기존 객체를 찾아올 때, AppConfig에서 직접 찾아왔다면
이제는 스프링 컨테이너를 통해서 찾아올 수 있게 되었다.

그리고 객체를 갖고올 때는,
applicationContext.getBean("memberService", MemberService.class);
이렇게 코드를 작성하게 되는데
처음엔 @Bean을 붙인 클래스 이름을 이름으로 주고
반환 타입을 뒤에 적어준다.



✅스프링 컨테이너에 빈 등록 되었는지 확인하기.

@Configuration 어노테이션을 붙인 AppConfig 메서드를 눌러
Spring Diagrams.../Bean Dependencies 를 클릭하면

이와 같이 스프링 컨테이너에 @Bean을 붙인 객체들이
잘 등록이 된 것을 확인할 수 있다.


✅정리

  • ApplicationContext를 스프링 컨테이너라고 한다.

  • 기존에는 Appconfig 클래스를 사용해 사용자가 직접 객체를 생성하고 DI했지만, 이제부터는 스프링 컨테이너를 사용한다.

  • 스프링 컨테이너는 @Configuration이 붙은 Appconfig를 구성정보로 사용한다. 여기에서 @Bean이라 적인 메서드를 모두 호출해서 반환된 객체를 스픵 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.

  • 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. ("memberService", MemberService.class)

  • 이전에는 개발자가 필요한 객체를 AppConfig 를 사용하여 직접 조회했지만, 이제부터는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾아야 한다.

  • 스프링 빈은 applicationContext.getBean() 메서드를 사용해 찾을 수 있다.

  • 기존에는 개발자가 직접 자바코드로 모든 것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.

profile
정도를 걷는 개발자

0개의 댓글