의존관계 자동 주입

qkrrnjswo·2023년 4월 17일
0

Inflearn Spring

목록 보기
11/13

의존관계 주입 방법

1. 생성자 주입(권장하는 방법)

  • 생성자를 통해서 의존 관계를 주입
  • 생성자 호출시점에 딱 1번만 호출되는 것이 보장
  • 불변, 필수(값이 무조건 필요) 의존관계에 사용
  • 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입
    	

2. 수정자(setter) 주입

  • 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입
  • 선택, 변경 가능성이 있는 의존관계에 사용
  • 스프링은 빈을 생성하는 라이프사이클과 의존관계주입을 해주는 라이플 사이클로 나눠져 있다.
    --> setter주입은 의존관계주입 시 사용(@Autowired를 보고 주입)
    --> 생성자 주입은 빈을 생성할 때 주입
  • @Autowired는 주입할 대상이 없으면 오류가 발생한다 -> @Autowired(required = false)지정
  • 자바빈 프로퍼티 규약: setXxx, getXxx 라는 메서드를 통해서 값을 읽거나 수정하는 규칙
    	

3. 필드 주입

  • 필드에 바로 주입하는 방법
  • 외부에서 변경이 불가능해서 테스트 하기 힘들다
  • DI 프레임워크가 없으면 아무것도 할 수 없다.
  • 그냥 사용하지 말자!

4. 일반 메서드 주입

  • 일반 메서드를 통해서 주입
  • 한번에 여러 필드를 주입 가능
  • 잘 사용하지 않음

옵션 처리

1. @Autowired(required=false)

: 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨

//Member는 빈에 등록되지 않은 클래스
@Autowired(required = false)
public void setNoBean1(Member member) { // 호출 자체가 안됨
	System.out.println("setNoBean1 = " + member);
}

2. org.springframework.lang.@Nullable

: 자동 주입할 대상이 없으면 null이 입력된다.

@Autowired
public void setNoBean2(@Nullable Member member) { //null로 들어온다
	System.out.println("setNoBean2 = " + member); 
}

3. Optional<>

: 자동 주입할 대상이 없으면 Optional.empty

@Autowired(required = false)
public void setNoBean3(Optional<Member> member) { // Optional.empty
	System.out.println("setNoBean3 = " + member);
}

롬복 lombok

  1. 생성자가 딱 1개만 있으면 @Autowired 를 생략
  2. 롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용
    -> final이 붙은 필드를 모아서 생성자를 자동 생성
  3. 자주쓰는 롬복, @Getter, @Setter, @ToString... 등

조회 빈이 2개 이상

@Autowired 필드 명 매칭

  • 타입매칭을 시도 => 여러 빈이 있으면 필드 이름, 파라미터 이름으로 추가 매칭(같으면 가져 옴)

@Qualifier 사용(추가 구분자)

  • @Qualifier("A(추가적인 이름)")
  • @Autowired타입 매칭 => @Qualifier끼리 매칭
    => A라는 이름의 스프링 빈을 추가로 찾는다(추천 안함)

@Primary

  • 우선순위 지정
  • 여러 빈 중에 @Primary가 우선적으로 선정

활용

메인 데이터베이스의 커넥션을 획득하는 스프링 빈은 @Primary 를 적용,
서브 데이터베이스 커넥션 빈을 획득할 때는 @Qualifier 를 지정해서
명시적으로 획득 하는 방식으로 사용하면 코드를 깔끔하게 유지 가능.
(우선순위: @Qualifier가 @Primary보다 우선순위가 높다)

애노테이션 직접 만들기

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

자동, 수동의 올바른 실무 운영 기준

0개의 댓글