의존관계 주입은 크게 4가지 방법이 있다. ( 당연한 소리지만, 스프링 빈으로 등록된 클래스여야 가능 )
생성자 주입 (제일 자주 쓰임)
수정자 주입(setter 주입)
필드 주입 (사용 X)
일반 메서드 주입
@Autowired(required = false)
required = true가 기본값임, required = true로 하면 예외가 터짐
자동 주입할 대상이 없으면 메서드 자체가 호출 X
@Nullable 어노테이션 : null을 허용할 경우 null 반환
Optional<> : null 일경우 empty 반환
"불변"
수정자 주입 (setter) 을 사용하면 메서드를 public으로 열어두어야함 -> 호출해서 변경이 가능
생성자 주입을 사용하면 필드에 "final" 키워드를 사용해 생성자에서 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
생성자 만들어야하고, 주입 받은 값을 대입하는 코드도 만들어야한다
@RequiredArgsConstructor : final이 붙은 필드값의 생성자를 자동으로 만들어준다.
타입으로 조회 하기 때문에 선택된 빈이 2개이상일때 문제가 발생
자동 의존주입관계에서 크게 3가지 방법이 있다
@Autowired 필드명 매칭
@Quilifier -> @Quilifier끼리 매칭 -> 빈 이름 매칭 (잘 사용 X)
@Primary 사용 (자주 사용)
번외
@Qualifier(자세한) vs @Primary(넓은범위) = Primary는 넓은범위의 선택권이고, Qualifier은 좁은범위의 선택권이므로 Spring은 좁은 범위의 우선순위가 높다.