의존관계 주입 방법에 대하여 알아보았다.

 

의존관계 주입은 크게 4가지 방법이 있다.

-생성자 주입

-수정자 주입(setter 주입)

-필드 주입

-일반 메서드 주입

 


 

먼저 생성자 주입이란?

 

이름 그대로 생성자를 통하여 의존관계를 주입 받는 방법이다.

 

지금까지 해온 방법이 생성자 주입이다.

 

특징으로는 

생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.

딱 1번 호출된다는 것은 호출된 이후부터는 그다음부터는

값을 세팅못하게 막을 수 있다는 장점이 있다.

 

불변, 필수 의존관계에 사용한다.

 

생성자가 딱 1개만 있다면 @Autowired를 생략해도 자동 주입이 된다. 

 


수정자 주입이란?

 

setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통하여 의존관계를 주입하는 방법이다.

 

특징으로는 

선택, 변경 가능성이 있는 의존관계에 사용한다.

 

자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다.

     

ex)

@Autowired

public void setMemberRepository(MemberRepository memberRepository) {

           this.memberRepository = memberRepository

}

 

@Autowired의 기본 동작은 주입 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하게

하려면 @Autowired(required = false)로 지정하면 된다.

 

자바빈 프로퍼티, 자바에서는 과거부터 필드의 값을 직접 변경하지 않고, setXxx, getXxx 라는 메서드를

통해서 값을 읽거나 수정하는 규칙을 만들었는데, 그것이 자바빈 프로퍼티 규약이다.

 


필드 주입이란?

 

이름 그대로 필드에다가 값을 넣는것이다.

ex) @Autowired private MemberRepository memberRepository;

      @Autowired private DiscountPolicy discountPolicy;

 

특징으로는 

코드가 간결해서 많은 개발자들을 유혹하지만 외부에서 변경이 불가능하므로 테스트 하기 힘들다는 치명적인 단점이 있다.

DI 프레임워크가 없으면 아무것도 할 수 없다.

사용하지 말아야한다. 인텔리제이 !표시에도 추천하지 않는다고 문구를 준다.

 


일반 메서드 주입이란?

 

일반 메서드를 통해서 주입 받을 수 있다.

 

특징으로는

한번에 여러 필드를 주입 받을 수 있다.

일반적으로 잘 사용하지 않는다.

 

참고로 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다. 스프링 빈이

아닌 Member 같은 클래스에서 @Autowired 코드를 적용해도 아무 기능도 동작하지 않는다.

'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글

36. 생성자 주입을 선택하라  (0) 2021.08.16
35. 옵션 처리  (0) 2021.08.13
34. 중복 등록과 충돌  (0) 2021.08.10
33. 필터  (0) 2021.08.10
33. 탐색 위치와 기본 스캔 대상  (0) 2021.08.05

+ Recent posts