Spring boot

[입문] 스프링 빈과 의존관계

컴포넌트 스캔과 자동 의존관계 설정

MemberService 는 별 기능 없음 여러개 생성할 필요 없이 공유해서 쓰면 된다. -> 스프링 컨테이너에 등록하고 사용하자

딱 하나만 등록된다

@Autowired를 생성자에 붙이면 스프링의 멤버서비스를 자동으로 연결해줌

오류! MemberService를 찾을 수 없음 왜냐하면 지금 MemberService는 순수 자바 클래스이기 때문

스프링컨테이너에 등록하기 위해 MemberService에 @Service를 붙여주자

MemoryMemberRepository에도 @Repository

위와 같은 방식이 스프링 빈을 등록하는 컴포넌트 스캔 방식

 

@SpringBootApplication 을 포함하는 패키지를 뒤져서 스프링 빈에 등록함

 

스프링 빈은 스프링 컨테이너에 싱글톤으로 등록됨

 

ctrl + N : find class

 


자바 코드로 직접 스프링 빈 등록하기

SpringConfig

메인과 같은 패키지에서 SpringConfig 파일을 생성하고 @Configuration, @Bean을 사용해 직접 스프링 빈에 등록한다.

다만 Controller는 그대로 Autowired 한다.

 

Dependency Injection 방법

  1. 생성자 주입 
  2. 필드 주입 (비추천)
  3. setter 주입 (public으로 set이 노출되어 중간에 바꿀 수 있음 -> 문제 일어날 수 있다)
실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

Autowired는 스프링이 관리하는 객체에서만 동작한다.