본문 바로가기
Java/스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술

[Spring Bean과 의존관계 - (2)] Java Code 로 직접 Spring Bean 에 등록하기

by Rezal 2022. 7. 1.

기존에 Component Scan 방식이 아닌 직접 자바 코드를 이용해서 Bean 에 등록할 것이기 때문에, Controller를 제외한 @Service, @Repository, @Autowired 를 제거한다.

 

 

SpringConfig

 

 

  • Main method Scope 에 SpringConfig class 를 생성하고, 다음과 같이 작성한다.
  • Spring 이 @Configuration 으로 인식하면, @Bean annotation으로 등록한 MemberService 와 MemberRepository 를 Bean 으로 등록한다.

 

MemberService, MemberController class

 

  • MemberService 에서 MemberRepository 가 Bean 으로 등록되어 있는지 Spring container 내에서 객체를 찾고, 위에서 @Bean 으로 등록했기 때문에 의존성을 주입한다.
  • Controller 는 따로 설정하기 어려워서 Bean 으로 따로 등록하지 않음. 마찬가지로 MemberService 가 Bean으로 등록되어 있으니 기존 Component Scan 방식으로 의존성을 주입한다.

 

 

의존성 주입(DI ; Dependency Injection)의 3가지 방법

  1. 생성자 주입
  2. 필드 주입
  3. setter 주입

1번은 우리가 이미 알아본 방법 이므로 2번부터 설명한다.

 

 

2. 필드 주입(권장되지 않음)

MemberController class

  • 직접 import 된 class 타입의 변수에 주입하는 방법
  • 생성자 주입 방법과 달리, 주입 시 바꿀 수 있는 방법이 없으므로 권장되지 않는다.

 

3. setter 주입(권장되지 않음)

  • setter method 의 scope 가 public 해야하므로, code 가 노출되어 마찬가지로 권장되지 않는다.
  • 즉, 누구나 호출할 수 있는 단점이 존재
  • 보통 어플리케이션 로딩하고 조립할 때 바꾸지, 어플리케이션이 한번 세팅되면 바꿀일이 잘 없다.

 

 

***그렇다면 왜 Bean 을 등록하는 방법을 2가지를 알아야할까?

: 상황에 따라 구현 class 를 변경해야하는 경우 때문

 

 

  • 우리는 이전에 DB를 Memory 방식으로 설정하고, 나중에 DB를 만들기로 했다.
  • 즉, 기존의 MemoryMemberRepository의 의존성에 종속되지 않고 Configuration 만 변경해서 의존관계를 재설정하기 위해, @Configuration 과 @Bean 으로 Spring Bean 에 등록하는 방법을 알아야할 필요성이 있었던 것이다.
  • 따라서 Component Scan 방식은 정형화된 방식, Configuration Bean 등록 방식은 의존성 주입에 필요한 클래스 변경 시 사용된다.

 

- 더 나아가기

 

https://upcake.tistory.com/417

 

[Spring] @Autowired 대신 @RequiredArgsConstructor

1. 개요 의존성 주입이란 것을 할 때 @Autowired 대신 생성자 주입을 활용하면 좋다고 합니다. 저도 공부 중이라 스프링 IoC, 빈, 의존성 같은 개념들은 잘 모르지만 일단 바로 적용할 수 있는 생성자

upcake.tistory.com

 

@Autowired 는 필드주입이므로, @RequiredArgsConstructor 를 활용하자.