개발자 대신 컨테이너가 인스턴스 제어권을 가지고, 인스턴스 생명주기를 관리하며, 생성된 인스턴스에 추가적인 기능을 제공하는 것
즉, 프로그램의 제어 흐름이 개발자에서 컨테이너로 역전된 것임
일반적인 프로그램 흐름 (main에서 사용할 객체를 생성하는 것)과는 반대로 객체의 호출 작업이 외부에서 결정됨
스프링 컨테이너, DI 컨테이너로도 불림
1. DL
2. DI
컨테이너가 객체 간의 의존관계를 Bean 설정 정보를 바탕으로 외부에서 주입하는 것
방법으로는 생성자 주입, 필드 주입, 수정자 주입 등이 있음
DL 사용시 컨테이너 종속성이 증가하므로 주로 DI를 사용함
1. Bean Factory
빈 등록, 생성, 조회, 반환, 관리하는 스프링 컨테이너의 최상위 인터페이스
보통 Bean Factory를 바로 사용하지 않고, 이를 확장한 Application Context를 사용함
2. Application Context
부가 기능
- Transaction 처리
- AOP 처리
- MessageSource: 메시지 다국화 처리
- EnvironmentCapable: 어플리케이션 구동에 필요한 설정 처리
- ApplicationEventPublisher: 어플리케이션 이벤트 처리
- ResourceLoader: 파일 등의 외부 리소스를 읽어오는 처리
개발자는 비즈니스 로직 구현에 집중할 수 있음
객체 생성 코드가 없어서 TDD에 용이함