spring

스프링 스터디 6주차

조쿼카 2022. 2. 17. 15:21

[다양한 의존관계 주입 방법] 

1. 생성자 주입

  • 생성자를 통해서 의존 관계를 주입 받는 방법
  • 불변, 필수 의존관계에 사용
  • 생성자가 1개만 있을 경우에는 @Autowired를 생략해도 자동 주입된다!

2. 수정자 주입(setter 주입)

  • setter라는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계를 주입
  • 선택, 변경 가능성이 있는 의존관계에 사용
  • 주입할 대상이 없어도 동작하게 하려면 @Autowired대신 @Autowired(required = false)사용

3. 필드 주입

  • 필드에 바로 주입
  • 외부에서 변경이 불가능 -> 테스트 하기 힘든 단점 --> 사용하지 말기!!

4. 일반 메서드 주입

  • 일반 메서드를 통해 주입 받는다
  • 한번에 여러 필드르 주입 받을 수 있음

★ 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작함!! Member같은 클래스에서는 불가능

 

 

 

[옵션 처리]

자동 주입 대상을 옵션으로 처리하는 방법

자동 주입할 대상이 없으면

  • @Autowired(required=false) - 수정자 메서드 자체가 호출 안됨
  • org.springframework.lang.@Nullable - null 호출
  • Optional<> - Optional.empty가 입력됨

★ 과거 : 수정자 주입, 필드 주입 많이 사용 -> 최근에는 생성자 주입을 권장함!!

<이유>

  • 1. 불변 2. 누락 3. final 키워드
  • 프레임워크에 의존하지 않고, 순수한 자바 언어의 특징을 잘 살릴 수 있음
  • 기본으로 생성자 주입 사용하고 필수 값이 아닌 경우에는 수정자 주입 방식을 옵션으로 뷰여

 

[롬복 라이브러리]

@RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어줌

-> 코드 깔끔하게 사용 가능!

 

 

 

[조회 빈이 2개 이상 : 문제]

@Autowired는 타입으로 조회하는데 이렇게 되면 빈이 2개 이상일 때 문제가 발생한다

-> 해결방법 :

 

1. @Autowired 필드 명 매칭

  • 타입 매칭 시도
  • 타입 매칭 결과가 2개 이상일 때 필드 명, 파라미터 명으로 빈 이름 매칭

2. @Qualifier 

  • @Qualifier끼리 매칭
  • 주입시에 @Qualifier를 붙여주고 등록한 이름을 적어준다

3. @Primary 사용

  • 우선순위를 정하는 방법
  • @Autowired 시에 여러 빈이 매칭되면 @Primary가 우선권을 가진다

★ 우선순위 : @Qualifier>@Primary

 

 

[애노테이션 직접 만들기]

[조회한 빈이 모두 필요할 때, List, Map]

 

  • 편리한 자동 기능을 기본으로 사용
  • 직접 등록하는 기술 지원 객체는 수동 등록
  • 다형성을 적극 활용하는 비즈니스 로직은 수동 등록 고민해보기

 

 

 

[빈 생명주기 콜백]

  • 스프링 빈의 라이프사이클 : 객체 생성 -> 의존관계 주입
  • 스프링 빈의 이벤트 라이프사이클 : 스프링컨테이너생성 -> 스프링빈생성 -> 의존관계주입 -> 초기화콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료

스프링은 아래의 3가지 방법으로 빈 생명주기 콜백을 지원

  • 인터페이스

InitializingBean : afterPropertiesSet() 메서드로 초기화 지원

DisposableBean : destroy() 메서드로 소멸 지원

 

  • 빈 등록 초기화, 소멸 메서드 지정

설정 정보에 @Bean(initMethod = "init", destroyMethod = "close") 처럼 초기화, 소멸 메서드를

지정

  • 애노테이션 @PostConstruct, @PreDestroy

최근 스프링에서 가장 권장하는 방법, 편리함 / 컴포넌트 스캔과 잘 어울린다.

 

'spring' 카테고리의 다른 글

스프링 스터디_마지막  (0) 2022.02.24
스프링 스터디 5주차  (0) 2022.02.10
스프링 스터디 4주차  (0) 2022.02.03
스프링 스터디 3주차  (0) 2022.01.27
스프링 2주차 스터디  (0) 2022.01.20