1. 생성자 주입
생성자 주입의 순서 :
1. OrderServiceImpl 에 @Component 가 붙어있으므로 스프링 컨테이너에 얘를 new 하려면 생성자를 호출, 실행하게 됨. 2. 이 때 생성자 파라미터에 MemberRepository, DiscountPolicy 두 개가 있으므로 그 두개를 스프링컨테이너에서 찾아 와서
3. 넣은 다음 OrderServiceImpl 객체(빈) 을 생성한다.
생성자에 @Autowired, 스프링이 컴포넌트 스캔 할 때 OrderServiceImpl 이 빈으로 등록이 될 떄
등록이 될때 생성자 호출 됨.
-> 생성자 호출 할 때 @Autowired가 있네!!
-> 파라미터에 있는 타입의 빈을 스프링 컨테이너에서 꺼내서 딱 주입해줌.
( 생성자 주입은 스프링의 Lifecycle 1,2번이 동시에 일어난다. )
# 스프링은 크게 두가지 Lifecycle로 나누어져 있다.
1. 스프링 빈을 등록
2. 연관관계를 자동으로 주입 ( @Autowired가 걸린 애들은 자동으로 주입 ) ( 의존성 주입 )
생성자를 통해서만 의존관계가 주입이 되고 외부의 어느누구도 memberRepository, discountPolicy 변수를 수정할 수 없다.
불변 = ( 공연 시작 전에 배우, 배역을 정해두고 싶다. )
필수 = 생성자의 파라미터는 무조건 채워넣어야함 ( null 안됨 )
2. Setter 주입
이건 @Autowired 없으면 주입안됨.
# 스프링은 크게 두가지 Lifecycle로 나누어져 있다.
1. 스프링 빈을 등록
2. 연관관계를 자동으로 주입 ( @Autowired가 걸린 애들은 자동으로 주입 ) ( 의존성 주입 )
의존관계를 주입한다 = 이게 바로 @Autowired
3. 필드 주입
4. 일반 메서드 주입
setter주입이랑 거의 비슷함.
ㅋㅋㅋㅋㅋㅋㅋㅋ당연함. 주입하는 객체가 빈이어야 함.
--------------------------------------------------------------------- 7-2. 옵션 처리
주입 받을 빈이 없어도 작동해야 할 때 가 있다.
1번 방법. 이렇게 뜬다. noBean1 은 호출 자체가 안됨. -> required = false 이고 의존관계가 없으면 setNoBean1 메서드 자체가 호출이 안된다.
2번 방법. 호출은 되나 null이들어감.
3번 방법. Optional.empty가 반환 된다.
'Java, Spring > 스프링 핵심 원리 기본' 카테고리의 다른 글
7-5. 조회 빈이 2개 이상 - 문제 ~ 7-6 @Autowired필드명, @Qualifier, @Primary (0) | 2022.08.07 |
---|---|
7-3. 생성자 주입을 선택해라! ~ 7-4. Lombok (0) | 2022.08.07 |
6-4. 중복 등록과 충돌 (0) | 2022.08.07 |
6-1. 컴포넌트 스캔과 의존관계 자동 주입 ~ 6-3 (0) | 2022.08.07 |
5-4. 싱글톤 방식의 주의점(아주 중요) ~ 5-6 (0) | 2022.08.07 |