🐌 스프링 컨테이너
객체(Bean)를 대신 생성/관리/주입해주는 관리자
| 기존 자바 | BoardService service = new BoardServiceImpl(); |
| 스프링 | BoardService = context.getBean("bs"); |
객체 생성 책임을 개발자 ➡ 스프링에게 넘김
이것을 IoC (제어의 역전) 라고 함
스프링 컨테이너의 전체 구조
[ ApplicationContext ]
|
├─ BeanFactory
├─ BeanDefinition
├─ Bean Registry
├─ DI Engine
└─ LifeCycle Manager
🐌 BeanFactory (최상위 컨테이너)
역할 : Bean 생성. Bean 조회(getBean())
특징 : 최소 기능만 제공, 지연 로딩
실무에서는 거의 직접 사용 안하고 ApplicationContext가 이를 확장함
🐌 ApplicationContext (실제 사용하는 컨테이너)
역할 : BeanFactory 기능, 이벤트 처리, 메시지 처리, AOP 지원, 국제화(i18n)
| 클래스 | 설명 |
| GenericXmlApplicationContext | XML 기반 |
| AnnotationConfigApplicationContext | 애노테이션 기반 |
| WebApplicationContext | 웹 환경 |
구현체 예시 🔼
🐌 BeanDefinition (설계도)
Bean 하나의 메타정보
포함 정보 : 클래스 이름, Bean 이름(id), scope, 의존성 정보
XML / 어노테이션을 읽어서 생성됨
🐌 Bean Registry (보관소)
BeanDefinition & Bean 저장소
| Map<String, Object> beans |
key : Bean 이름
value : Bean 객체
🐌 DI 엔진 (의존성 주입 과정)
@Service
public class BoardServiceImpl {
@Autowired
private BoardDAO dao;
}
1) @Service 발견
스프링이 클래스 스캔 중 @Service를 발견
→ Bean 등록 대상임을 인식
2) BoardServiceImpl 객체 생성
스프링 컨테이너가 new BoardServiceImpl() 수행
(개발자가 new 하지 않음)
3) @Autowired 발견
생성된 객체의 필드를 검사하다 @Autowired 발견
→ 의존성 주입 대상 필드로 판단
4) 타입(BoardDAO) 탐색
컨테이너에서 BoardDAO 타입의 Bean 검색
(@Repository, @Component 등으로 등록된 Bean)
5) Bean 주입
찾은 BoardDAO Bean을 dao 필드에 주입
(리플렉션을 사용하여 private 필드에도 주입)
📌 이 모든 과정은 스프링 컨테이너가 자동으로 처리함
🐌 Bean 생명주기 (LifeCycle)
생성 ➡ 의존성 주입 ➡ 초기화 ➡ 사용 ➡ 소멸
관련 메서드 : @PostConstruct, @PreDestroy
정리 : 스프링 컨테이너는 Bean의 생성, 연결, 생명주기를 관리하는 객체 공장이다
- IoC: 객체 생성 제어를 스프링이 담당
- DI: 필요한 객체를 자동으로 주입
- Bean: 컨테이너가 관리하는 객체
- ApplicationContext: 스프링 컨테이너의 실체
'🍃 Spring' 카테고리의 다른 글
| Spring Boot 404 에러 해결: @GetMapping를 붙여보자 (0) | 2026.01.16 |
|---|---|
| 복습 겸 스프링 구조 이해해보기 (0) | 2026.01.16 |
| @Component 계열 어노테이션 [ @Component | @Repository | @Service | @Controller ] (0) | 2026.01.14 |
| .xml 대신 @ (어노테이션) 사용해보자! (0) | 2026.01.14 |
| 의존성 주입(DI, Dependency Injection)와 생성자 주입, 세터 주입 (0) | 2026.01.14 |