작성날짜
2023.06.27
(이전 블로그 글)
스프링의 3대 요소 전체보기
https://velog.io/@song-eojin/SpringBoot-%EC%94%B9%EC%96%B4%EB%A8%B9%EA%B8%B0-01%ED%83%84-Spring%EC%9D%98-3%EB%8C%80-%EC%9A%94%EC%86%8C
(위에 링크 첨부) 앞선 글에서는 스프링의 3대 요소에서는 DI(의존성 주입) 자체가 무엇인지에 대해 살펴보았다면,
이번에는 의존성을 주입하는 다양한 방법에 대해 자세히 살펴보려 한다.
@Autowired 애너테이션이란?
IoC 컨테이너 안에 있는 Bean 중에서 의존 객체의 타입에 대응하는 Bean을 찾아 주입해준다. 이때, 의존성 주입되는 대상과 주입당하는 대상 모두 Bean으로 등록되어 있어야 한다. 아래 사진은 @Autowired 자바 애너테이션의 공식문서로, @Target 안에 보면 @Autowired를 적용할 수 있는 대상이 적혀있다.
생성자가 1개이면 의존성 주입을 해주는 @Autowired 애너테이션을 생략할 수 있으며, 생성자에 의해 ConstructorDi 객체가 생성될 때 Repository와의 의존관계 주입이 동시에 발생한다,
@Component //빈 등록하는 애너테이션
public class ConstructorDi {
private Respository repository;
//Repository와 ConstructorDi의 의존 관계를 생성자로 주입
public ConstructorDi(Respository repository) {
this.repository = repository;
}
}
위 코드에서 Bean으로 등록이 된 객체는 ConstructorDi와 Repository이다. 일단 ConstructorDi의 경우 Bean으로 등록시켜주는 @Component 애너테이션을 달아주었고, Repository의 경우 IoC 컨테이너가 관리하고 있는 Bean이기 때문에 의존성 주입이 가능했다. 이때, Bean으로 등록된 ConstructorDi는 싱글톤 패턴으로 관리되므로 의존관걔를 주입하는 생성자의 호출은 일회성이다.
[블로그]
https://galid1.tistory.com/512
https://devlog-wjdrbs96.tistory.com/426
https://jjingho.tistory.com/6