개발 지식/Spring
의존성 주입 원칙
윤씅
2024. 8. 10. 23:37
∎ 의존 관계 주입 4가지 (@Autowired)
✔ 생성자 주입을 사용해라!
- 한번 밖에 호출 못하므로, 불변에 적합하다.
- 필드를 final로 설정할 수 있다.
- 생성자를 이용하므로, 필수에 적합하다.
- 생성자를 통해 직관적으로 주입하므로, NullPointException을 방지할 수 있다.
✔ set을 통한 주입
✔ 필드에 @Autowired
- 필드가 private이라 쉽게 주입 불가능
- 사용 추천 안함!
✔ 메서드를 통한 주입
- 여러 필드를 동시에 주입 가능
- 생성자나 setter를 통해 해결가능 하므로 거의 사용 안함!
∎ 그외
- 주입할 빈이 없으면 오류가 나므로, required를 false로 설정하여 오류를 방지한다. ➜ 메소드 자체가 호출 안되게 된다.
- @Nullable을 이용하면 null값이 나온다.
- Optional<>을 이용하면 Optional.empty가 나온다.
∎ 생성자 주입을 더 간단하게!
✔ lombok
- @Autowired 생략 후,
- @Getter, @Setter로 get, set을 간단하게 할 수 있음
- @RequiredArgsContructor 하면 final 필드의 생성자를 자동으로 만들어줌 (겉으론 보이지 않음)
∎ 라이프 사이클
- 생성 후 ➜ 의존 관계를 주입후 ➜ 값을 넣는 라이프사이클을 가진다.
- 값을 넣는 것은 스프링이 콜백을 통해 알려준다.
- 스프링 컨테이너 생성 ➜ 스프링 빈 생성 ➜ 의존관계 주입 ➜ 초기화 콜백 ➜ 사용 ➜ 소멸전 콜백 ➜ 스프링 종료
- 생성과 초기화는 역할을 분리하는 것이 좋다. (생성 후, 따로 초기화 시켜주는 것이 좋다.)
콜백하는 법
- @PostConstruct를 통해 값을 넣어준다.
- @PreDestroy를 통해 소멸전 작업을 해준다.
- 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료하려고 하면 @Bean의 initMethod, destoryMethod를 사용하자.