4. 스프링 빈과 의존관계

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

  • @Controller 어노테이션으로 해당 클래스를 빈 객체화 시켜 스프링 컨테이너에 등록할 수 있음
    • 스프링 컨테이너에서 빈 객체들을 관리함
    • @Service, @Repository 도 마찬가지
  • 지금까지는 객체를 생성하고 등록해주고 있었는데, 각 Controller, Service, Repository 를 빈화시켜 컨테이너에 등록할 수 있음

DI (Dependency Injenction)#

@Autowired 를 이용하면 스프링 컨테이너에 등록되어 있는 빈중 가장 적절한것을 자동으로 엮어줌

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

  • 컴포넌트 스캔과 자동의존 관계 설정
    • @Component 어노테이션이 각 사용한 (like @Controller) 어노테이션에 붙어 있음
      • 해당 어노테이션을 사용하면 스프링 컨테이너에 등록됨
      • 이후 스프링 빈으로 등록하면 좋은점들을 설명해줄 예정
    • @Autowired 로 의존관계
  • 자바 코드로 직접 스프링 빈 등록하기

@SpringBootApplication 이 붙어있는 하위 패키지에서만 Component 스캔을 함.

기본적으로 스프링 컨테이너에 싱글톤으로 등록됨

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

@Service, @Repository, @Autowired 어노테이션을 제거하고 진행

@ComponentScan@Configuration 으로 직접 등록하는 방법의 차이#

  • DI 에는
    • 생성자 주입 (제일 권장, 실제 동적으로 의존관계를 변경할 일이 거의 없음)
    • 필드 주입: 별로 안좋음? 중간에 의존성을 바꿀 방법이 없음
    • setter 주입
  • 정형화되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 변경해야함
    • 자바 코드로 직접 스프링 빈 등록하는 법으로 바꾸기 가능
  • @Autowired 는 스프링 컨테이너에 등록된 빈에서만 작동함
Last updated on