Dependency Injection Revisited by Juergen Hoeller @ Spring I/O 2025
- 스프링 IoC 컨테이너 핵심: 의존성 주입(DI)과 빈 정의에 대한 심층적인 이해가 중요 🔑
- DI 설정 시 명시적인 힌트를 제공하여 컨테이너가 개발자의 의도를 정확히 반영하도록 유도해야 함 🤔
- 최신 스프링(6.2) 기능 소개, 일부 내용은 5.3, 심지어 4.3부터 존재, 7.0의 새로운 빈 등록 기능도 다룸 🆕
- DI는 어노테이션 기반으로 생각되지만, 핵심은 빈 이름과 메타데이터 기반이며, 어노테이션과 프로그래밍 방식의 조합이 가능 💡
- '주입점(Injection Point)'은 컨테이너가 제공해야 하는 인자로, 생성자나 팩토리 메서드의 인수를 의미 📍
- 생성자 주입 시
@Autowired
어노테이션은 필수가 아니며, 단일 생성자의 경우 생략 가능 👌
- 기본적으로 주입 시점에는 완전하게 초기화된 빈이 제공되지만,
@Lazy
어노테이션을 사용하여 초기화 시점을 늦출 수 있음 ⏱️
@Lazy
는 컨테이너에게 초기화 최적화 자유를 주어 동시 부트스트래핑이나 순환 참조 문제를 해결하는 데 도움을 줌 🔄
@Nullable
어노테이션을 사용하여 빈이 없을 경우 null
값을 허용하도록 설정 가능 🕳️
java.util.Optional
을 사용하여 null
대신 빈이 없을 경우 빈 Optional 객체를 받도록 할 수 있음 📦
ObjectProvider
는 빈에 대한 핸들을 제공하며, getObject()
호출 시점에 빈을 검색하므로 지연 로딩과 유사함 🖱️
ObjectProvider
는 프록시 없이 실제 빈 인스턴스를 제공하며, 존재 여부를 확인하거나 조건부로 빈을 가져올 수 있음 ✅