스터디/스프링

스프링 공부 일지 - 스프링 빈과 의존관계? 그게 뭔데?

sleesm 2022. 10. 19. 21:45

 

 

오늘은 스프링 빈과 의존관계에 대해 알아보고자 한다!!!!

 

저번 블로그 글 👉👉

2022.10.09 - [스터디/스프링] - 스프링 공부 일지 - 간단한 회원 관리와 테스트 케이스 만들기!!

 

스프링 공부 일지 - 간단한 회원 관리와 테스트 케이스 만들기!!

오늘은 간단한 회원 관리를 해보고 테스트 케이스를 만들어보고자 한다!! 지난 블로그 👉👉 2022.10.07 - [스터디/스프링] - 스프링 공부 일지 - 스프링 웹 개발 방법 3가지 스프링 공부 일지 - 스프

sleecode.tistory.com

 

 

 

 

 

 

 

 


 

 

'스프링 빈' 은 무엇인가?!!!!

 

👉 스프링 컨테이너에서 관리되는 자바 객체 POJO(Plain Old Java Object) 를 의미한다

👉 등록할 때 기본으로 싱글톤으로 등록한다!!! 

👉 유일하게 하나만 등록해서 공유한다는 것!! (설정을 할 수 있으나, 대부분이 싱글톤)

 

 

 

 

그렇다면 '스프링 컨테이너'는 ?

 

👉 스프링 빈의 생명 주기를 관리한다!!

👉 이로써 객체들 간의 의존관계를 알아서 처리해주고, 제어 흐름을 외부에서 관리한다고 할 수 있다!!

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

스프링 빈을 등록하는 방법에는 2가지가 있다!!

 

정형화된 경우에는 컴포넌트 스캔을,

정형화되지 않거나, 상황에 따라 변경해야 하면 직접 빈 등록을 한다!

 

 

 

 

 

 

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

 

 

  • 기본으로 @SpringBootApplication 이 있는 패키지부터 하위 목록 모두 스프링 빈으로 컴포넌트 스캔을 한다!!
    • @SpringBootApplication 에 들어가면 @ComponentScan 이 있다 

 

  • @Component 어노테이션이 있으면 스프링 빈으로 자동 등록!
    • 컴포넌트 어노테이션의 하위 목록
      • @Controller
      • @Service
      • @Repository

 

  • 의존 관계 설정
    • DI(Dependency Injection) 의존성 주입 👈 객체 의존관계를 외부에서 넣어주는 것
    • 객체 생성할 때 생성자에 @Autowired 를 추가하여
      스프링 빈으로 등록된 객체를 스프링 컨테이너에서 찾아서 넣어준다!!

 

MemeberService에 @Service를 붙이지 않고 @Autowired를 한 결과
MemberService를 스프링 빈으로 등록하지 않았기 때문에 생긴 문제
@Service를 통해 스프링 빈 등록 후 오류 사라짐

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

  • @Bean 을 사용해서 직접 등록!

자바 코드로 직접 스프링 빈 등록한 예

 

 

 

 

 

 

 

 

 

 


DI의 3가지 방법

 

 @Autowired를 사용한 필드 주입

public으로 setter 주입

생성자 주입

 

 

필드에다가 주입하면, 나중에 바꾸기 힘들다!

setter로 주입하면 public이라서 노출 가능성이 있고, 보통 중간에 바꾸는 일이 별로 없다!

생성자 주입은 보통 생성할 때 하니까 나중에 바꿀 수 없다!

 

 

하지만 의존관계가 실행 중 동적으로 바꾸는 경우 거의 없으므로 생성자 주입이 보통이다😉


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 해서 스프링에서 나오는 새로운 개념인,

 스프링 빈과 의존 관계 주입에 대해 알아보았돠!!!!!!

 


너무 오랜만에 글을 쓰는 것 같은데,

왜냐면 할 게 너무 많았고,,

시험기간이었고,,

 

블로그가 밀렸고,,,

네 그렇습니다 ㅎㅅㅎ,,,

 

 

 

 

그럼 안녕!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!🙌🙌🙌🙌🙌🙌🙌🙌