본문 바로가기

강의 내용 정리/스프링 입문

컴포넌트 스캔과 자동 의존관계 설정, 자바코드로 직접 스프링 빈 등록하기

맨 처음에 스프링이 뜰 때 스프링컨테이너가 뜨는데 @Controller 가 있으면 스프링컨테이너에 객체를 생성해서 넣어둔다.

= "스프링 컨테이너에서 스프링 빈이 관리된다" 고 표현

 

 

# 잘못쓴 경우 : 매번 객체 생성

객체 매번만들지말고 공용으로 쓰자!

 

 

 

MemberService 객체 하나만 만들어놓고 공용으로 쓰자!

 

이렇게 바꾸자! -> MemberController는 IoC 했고 @Autowired를 통해 memberService에 DI 하였다. 

 

그런데 왜 빨간불????

 

MemberService 클래스는 스프링에서 관리하지 않는 순수 자바클래스이기 때문이다. MemberService 도 IoC 해줘야 스프링에서 인식할 수 있다. -> @Service, 같은 이유로 MemoryMemberRepository 는 @Repository 붙혀주기.

 

-> 3클래스 모두 스프링에 의해 관리되고 있다. (IoC 된 상태이다.)

 

생성자에 @Autowired 하면 멤버컨트롤러가 생성이 될 때 스프링 빈에 등록되어있는 멤버서비스 객체를 가져다가 넣어줌

-> DI

= 생성자에 @Autowired 를 사용하면 객체 생성시점에 스프링컨테이너에서 해당스프링 빈을 찾아서 
   주입한다. 생성자가 1개만있으면 @Autowired 는 생략할수 있다.

(  아 너는 인자에 있는 객체가 필요하구나~ -> 멤버 서비스 객체 가져와서 넣어줌 )

 

지금 상태 ( 매개변수로 필요한 것 확인 후 넣어줌 )

 

스프링은스프링 컨테이너에스프링 빈을등록할때, 기본으로싱글톤으로 등록한다(유일하게하나만 
등록해서 공유한다) 따라서 같은 스프링빈이면 모두 같은 인스턴스다.

 

 

 

 

 

 

# 스프링빈을 등록하는 2가지 방법

 

1) 컴포넌트 스캔과자동의존관계설정 -> @Component

 

@Component 를포함하는다음 애노테이션도스프링 빈으로 자동등록된다.
   @Controller 
   @Service 
   @Repository

 

   - 스캔 범위

실행되는 애플리케이션 의 패키지 범위 내 모든 파일을 컴포넌트스캔 ( @Component있으면 등록 )

 


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

 

 

1. 스프링이 올라올 때 @Bean을 보고 멤버 서비스 멤버 리포지토리를 스프링 컨테이너에 올려준다. -> 멤버 서비스생성자에 멤버리포지토리(스프링컨테이너에등록된) 를 넣어준다.

 

2. Controller에서는 @Controller로 스프링컨테이너에 등록 후 @Autowired로 DI 해준다. 이때 DI되는 멤버서비스는 SpringConfig에서 @Bean으로 등록된 memberService이다.

 

 

이로인해 

지금 상태 ( 매개변수로 필요한 것 확인 후 넣어줌 )

이 그림이 완성된다.

   - 두 방법 모두 사용한다.

 

2번방법의 장점 : 나중에 new MemoryMemberRepository를 new DbMemberRepository로만 바꾸면 됨.

-> 설정파일 직접 작성했을 때의 장점

 

 

 

# DI 하는 3가지 방법

 

1. 생성자 주입

2. 필드주입

3. setter 주입

 

1. 생성자 주입

 

 - 생성자에 @Autowired 또는 @Bean을 이용한 아래와 같은 방법

 

 

2. 필드 주입

memberService에 바로 주입

( 안좋은 방법 인텔리제이도 생성자주입으로 바꾸라고 바로 추천해준다. )

 

 

 

3. setter 주입

 

- setter는 public 이므로 중간에 바뀌면 문제가 생긴다.

 

최고는 생성자 주입!!!!!!!!!! ( 조립시점에 한 번 생성 해두고 끝을 내야함 ) setter처럼 매번 바꿀 수 있으면 안좋음)

 

# 참고

- DI에는필드 주입, setter 주입, 생성자 주입이렇게 3가지방법이 있다. 의존관계가실행중에 
동적으로 변하는경우는거의 없으므로생성자 주입을권장한다.

 

 

 

 

 

출처 : 인프런 김영한님의 강의를 수강 후 정리한 내용입니다.

 

 

 

 

꾸준히 다시보자.

 

1. 220712

2. 220731

'강의 내용 정리 > 스프링 입문' 카테고리의 다른 글

통합테스트  (0) 2022.07.10
회원 웹 기능 - 홈 화면 추가, 등록  (0) 2022.07.10
회원 서비스 테스트  (0) 2022.07.10
회원 서비스개발  (0) 2022.07.05
회원 리포지토리 테스트 케이스 작성  (0) 2022.07.04
Recent Posts
Popular Posts
Recent Comments