스프링 빈을 만들 때 마다 @Bean을 계속 하기는 귀찮다. 자동으로 등록하려면 = @ComponentScan
의존관계 주입은 어떻게 하는가?
@Autowired로 자동으로 해준다.
생성자에 지정해주면 된다.
시작, 예외 다 지정해줄 수 있다.
디폴트: 내가 있는 폴더의 모든 하위 폴더, 파일
의존관계 주입 방법 -> 생성자 주입을 해라!
생성자 주입 : 생성자를 통해 의존관계 주입, 호출 시점에 딱 1번만 호출 , 생성자가 하나만 있다먄 @Autowired 생략 가능
수정자 주입 : 앞에 이름에 setOOOOOOOO (set필드명) 로 만든다.
필드 주입 : 편하지만 외부에서 변경이 불가능해서 추천 X, 테스트 코드에서만 써보자
일반 메서드 주입 : 한번에 여러 필드 주입 가능, 잘 사용 X
why 생성자 주입?
final 키워드 사용 가능 : 다른 오류들을 컴파일 오류로 잡아준다.
순수 자바 언어의 특징을 잘 살린다.
그런데 편리하게 사용하는 방버 없을까?
rombok의
@RequiredArgsConstructor
가 다 만들어줘서 안의 생성자 주입을 삭제해도 된다.
의존관계 생성이 편해진다.
빈이 1개가 연결되야 하는데 2개가 연결되면 오류가 난다.(고정할인과 % 할인)
@Autowired는 타입 매칭을 시도하고 여러 빈이 있다면 필드 이름과 파라미터 이름으로 빈 이름을 추가 매칭한다.
즉 구현 파일에서 이름을 바꿔서 할 수 있다.
@Quilifier("이름")을 앞에 붙여줘서 그것을 특징할 수 있다.
@Primary 우선순위를 지정해준다
위에 두개가 동시에 있다면 @Qulifier가 우선권을 가진다.