스프링 빈과 의존 관계

김민영·2023년 1월 18일
0

Spring

목록 보기
9/15

회원 컨트롤러에 의존 관계 추가하기

  • 컨트롤러와 뷰를 연결하는 것 : 의존한다.

  • 컨트롤러는 @Controller annotations 하면 스프링 시작시 해당 객체가 생성되어 들어옴
    : 스프링 부트 안의 스프링 컨테이너에서 스프링 빈이 관리된다.

  • 생성자에 @Autowired : 스프링이 스프링 컨테이너에 있는 것과 연결

  • 객체에 @Service, @Controller, @Repository : 정형화된 패턴 : 컴포넌트 스캔

    • Cotroller : 외부요청 받음
    • Service : 비즈니스 만듦
    • Repository : 데이터 저장
  • 스프링 컨테이너에 스프링 빈이 등록된 과정 : helloController -> memberService -> memberRepository

컴포넌트 스캔 방식

스프링 빈 의존관계 설정 방법

  • 컴포넌트 스캔과 자동 의존 관계 설정
    • @Autowired로 스프링이 연관된 객체를 스프링 컨테이너에 찾아서 연결함 : DI Dependency Injection : 의존성 주입
    • @Component : 스프링 빈으로 자동 등록
    • @Service, @Controller, @Repository 안에 @Component annotation 이 들어있으므로 스프링 빈으로 자동 등록 된다.
  • 자바 코드로 직접 스프링 빈 등록

주의

  • 스프링에서 관리하는 객체에서만 동작. 스프링 빈으로 등록하지 않고 직접 생성한 객체에서는 동작하지 않음.

@Component 설정 위치

  • 메인 Application 에서 보는 package 에 관한 것만 읽어들임.
  • 그 외의 패키지는 Component 스캔 대상이 아님.

싱글톤

  • 스프링이 스프링 컨테이너에 스프링 빈 등록 시, 기본적으로 싱글톤 형식.
    • Cotroller 하나, Service 하나, Repository 하나
  • 같은 스프링 빈이면 모두 같은 인스턴스.

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

  • @Controller 제외하고 다른 annotation 없애고 시작

  • SpringConfig 파일 만듦.

  • @Bean을 통해 스프링 컨테이너에 올림.

  • 이 코드에서 memberService는 memberRepository()가 필요하다.

  • 그러면 스프링 컨테이너에 있는 memberRepository()를 넣어주게 된다.

  • @Controller, @Autowired는 원래 스프링에서 관리해야하는 것이므로 그냥 사용

  • 이후 DB 바꾸기로 가정했으므로, 이 방식 사용한다.

    • 구현체만 바꾸면 되므로 편리

DI 방법

필드 주입

  • IntelliJ에서 생성자 주입 권장

setter 주입

  • 불필요한 메소드 호출을 가능하게 함.

생성자 주입

  • 의존 관계가 실행 중 동적으로 변하는 경우는 거의 없으므로 생성자 주입 권장

생성 시 (조립시)에 완벽하게 설정되도록 해야함.

profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글