[SPRING] #2 DI, 컴포넌트 스캔, Scope

eunseo·2021년 8월 18일
0

SPRING

목록 보기
2/14

Dependency Injection
IoC는 다양한 방법으로 만들 수 있습니다. 전략 패턴, 서비스 로케이터 패턴, 팩토리 패턴 그리고 의존관계 주입패턴들이 있습니다. 객체를 주입받는 패턴을 생성자 주입 패턴 (Dependency Injection) 이라고 부릅니다. 그 외에도 스프링은 세터 기반의 의존관계 주입도 지원합니다.

컴포넌트 스캔으로 빈 등록하기
컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능입니다. 설정 클래스에 빈으로 직접 등록하지 않아도 원하는 클래스를 빈으로 등록학 수 있습니다. 그러면 스프링은 자동으로 등록될 빈을 어떻게 찾을까요? 바로 Stereotype 애노테이션을 이용 하면 스캔대상을 지정할 수 있습니다.


https://incheol-jung.gitbook.io/docs/q-and-a/spring/stereo-type

예시로 basePackageClasses를 사용하면 order, voucher가 속한 패키지를 기준으로 컴포넌트 스캔을 한다.

Autowired를 이용한 의존관계 자동 주입

생성자 기반 의존관계 주입을 선택해야 하는 이유?

  • 초기화시에 필요한 모든 의존관계가 형성되기 때문에 안전합니다.
  • 잘못된 패턴을 찾을 수 있게 도와줍니다.
  • 테스트를 쉽게 해줍니다.
  • 불변성을 확보합니다.
  • 스프링 공식문서에도 스프링 팀에서 조차 생성자 주입을 응호한다고 하고있습니다.

@Primary와 @Qualifier 애노테이션을 이용한 의존관게 설정
자동 주입이 가능한 빈이 두개 이상이면 어떤 빈이 주입되야하는지 선택해야합니다. 안그러면 스프링은 무슨 객체를 주입해야하는지 모르기 때문에 애러가 발생합니다.

복수 개의 빈 설정하기

@Configuration 애노테이션 또한 컴포넌트 스캔의 대상이 되기 때문에 설정을 여러 파일로 분
리하고 메인이 되는 곳에서 컴포넌트 스캔으로 불러올 수도있다. 실제로 복잡한 상용 스프링 어플리케이션을 만들다보면 설정할 내용이 많기 때문에 여러 파일로 나누게 됩니다.

Bean Scope
스프링 공식문세어 보면 총 6개의 빈 스콥을 볼 수 있습니다. 기본적으론 싱글톤 스콥을 가집니다.

profile
backend developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN