컴포넌트 스캔이란?
스프링 부트는 @SpringBootApplication 이 붙어있는 클래스가 있는 패키지 내부에 있는 클래스들을 스캔한다.
스프링 부트 프로젝트를 생성하면 Application 클래스에 자동으로 @SpringBootApplication 이 붙어있다.
@SpringBootApplication
public class Day01Application {
public static void main(String[] args) {
SpringApplication.run(Day01Application.class, args);
}
}
컴포넌트 스캔으로 객체가 생성되는 어노테이션
@Controller, @RestController, @Service, @Repository, @Configuration, @Bean
@Component 어노테이션이 달려있으면 컴포넌트 스캔으로 객체가 생성된다.
위의 6개의 어노테이션은 모두 @Component가 달려있다.
위의 파일 구조에서 @SpringBootApplication이 붙어있는 Day01Application 클래스가 있기 때문에
day01 패키지 안에 있는 Test01Controller는 객체가 생성된다.
하지만 day02 패키지 안에 있는 Test02Controller는 객체가 생성되지 않는다.
Bean이란?
컴포넌트 스캔으로 객체가 생성되면 생성된 객체를 Bean이라고 부른다.
싱글톤 디자인 패턴으로 생성되어 외부(스프링 컨테이너)에 저장된다.
Bean의 Scope
기본적으로 스프링 컨테이너는 빈을 생성할 때 싱글톤 스코프를 기본으로 사용하지만, 다른 스코프도 설정할 수 있다.
싱글톤 스코프
스프링 컨테이너가 시작될 때 함께 생성되고, 스프링 컨테이너가 종료될 때까지 유지된다.
프로토타입 스코프
스프링 컨테이너에서 빈을 조회할 때 생성되고 초기화 메서드도 실행된다.
스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다.
클라이언트에게 빈을 반환한 이후에는 생성된 프로토타입 빈을 관리하지 않는다.
프로토타입 빈을 관리할 책임은 클라이언트에게 있기 때문에 종료 콜백 메서드가 호출되지 않는다.
'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] 서버 -> 클라이언트로 데이터 전달 (ResponseEntity) (0) | 2025.02.05 |
---|---|
[Spring Boot] 클라이언트 -> 서버로 데이터 전달 (RequestMapping) (0) | 2025.02.05 |
[Spring Boot] IntelliJ에서 스프링 부트 프로젝트 생성 / 초기 설정 (0) | 2025.02.05 |
[Spring Boot] Controller와 RestController 차이 (0) | 2025.02.05 |
[Spring Boot] Spring, Spring Boot란? / 제어 역전(IoC), 의존성 주입(DI) (1) | 2025.02.04 |