본문 바로가기

Java, Spring/스프링 핵심 원리 기본

7-1. 다양한 의존관계 주입 방법 ~ 7-2

 

 

 

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 

 

 

 

별거아님. 필드는 getter, setter로 접근해라.

 

 

 

3. 필드 주입

 

 

 

 

 

 

 

4. 일반 메서드 주입

 

 

setter주입이랑 거의 비슷함.

 

 

ㅋㅋㅋㅋㅋㅋㅋㅋ당연함. 주입하는 객체가 빈이어야 함.

 

 

 

 

 

 

 

---------------------------------------------------------------------  7-2. 옵션 처리

 

 

주입 받을 빈이 없어도 작동해야 할 때 가 있다.

 

 

@Autowired의 required 옵션을 true로 한다.

 

 

1번 방법. 이렇게 뜬다. noBean1 은 호출 자체가 안됨. -> required = false 이고 의존관계가 없으면 setNoBean1 메서드 자체가 호출이 안된다.

2번 방법.  호출은 되나 null이들어감.

3번 방법. Optional.empty가 반환 된다.

 

 

Recent Posts
Popular Posts
Recent Comments