1. IoC 컨테이너
- 애플리케이션 컴포넌트의 라이프사이클을 관리
- 컴포넌트 간의 의존성을 주입하는 기능을 제공하는 프레임워크
- BeanFactory
- ApplicationContext의 상위 인터페이스
- XML 파일이나 자바 설정 클래스 등에서 Bean의 정의를 읽어와서 Bean을 생성하고, 필요한 곳에서 의존성 주입을 수행함
- Bean의 생명주기를 관리하여, Bean이 생성될 때 초기화 작업을 수행하고, 애플리케이션이 종료될 때 Bean을 소멸시킴
- 지연 초기화(lazy initialization)를 지원
- Bean이 필요한 시점까지 생성을 지연시켜서, 메모리와 자원을 관리
- 인터페이스를 이용해서 다른 컨테이너와 연동할 수 있음
- ApplicationContext
- BeanFactory의 확장된 버전
- BeanFactory와 달리 미리 Bean을 생성하고 초기화하므로, 지연 초기화(lazy initialization)보다 빠른 초기화가 가능
- XML 파일이나 자바 설정 클래스를 사용하여 구성할 수 있으며, WebApplicationContext를 사용하여 웹 애플리케이션에서도 사용할 수 있음
- 스프링에서 지원하는 다른 프레임워크와 연동할 수도 있음
- 스프링에서는 ApplicationContext를 사용하여 필요한 Bean을 가져와서 사용하며, Bean을 관리하고 생명주기를 관리
- 대체로 시간 및 효율이 좋아 더 많이 사용함
2. @Bean
- 스프링에서 Bean으로 등록되어 IoC 컨테이너에서 관리되는 객체의 라이프사이클을 관리하고, 필요한 곳에서 의존성 주입을 수행하는 데 사용하는 어노테이션
- 개발자가 직접 작성한 클래스를 Bean으로 등록할 때
- 메소드 레벨에서 사용되며, 해당 메소드가 반환하는 객체가 Bean으로 등록
- 예를 들어, @Bean 어노테이션을 사용하여 DataSource 객체를 등록하면, 컨테이너는 이 DataSource 객체를 관리하고, 다른 컴포넌트에서 필요할 때 해당 빈 객체를 주입합니다.
@Configuration
public class MyConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
3. @Component
- 스프링에서 Bean으로 등록되어 IoC 컨테이너에서 관리되는 객체의 라이프사이클을 관리하고, 필요한 곳에서 의존성 주입을 수행하는 데 사용하는 어노테이션
- @Controller, @Service, @Repository 어노테이션으로 세분화 -> 각각 컨트롤러, 서비스, 레파지토리 역할을 하는 클래스를 Bean으로 등록할 때 사용
- 클래스 레벨에서 사용되며, 해당 클래스가 Bean으로 등록
- @Component 어노테이션을 사용하여 등록한 클래스는 기본적으로 싱글톤으로 관리
@Component
public class MyService {
}
cf)
빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다.
즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다.
빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
@Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록한다.
'⭐ Plogramming > Spring' 카테고리의 다른 글
property 우선 순위 (feat. application.properties) (0) | 2023.05.08 |
---|---|
HikariCP - DB ConnectionPool (1) | 2023.05.08 |
DI와 IOC와 DIP (feat. 프레임워크와 라이브러리) (0) | 2023.05.07 |
JPA와 Mybatis 차이 = ORM과 SQL MAPPER 차이 (0) | 2023.02.09 |
Spring 웹 계층 (0) | 2023.02.04 |