본문 바로가기

카테고리 없음

#29 @ComponentScan 과 빈의 스코프

@ComponentScan

@ComponentScan은 Spring이 특정 패키지에서 @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스를 자동으로 검색하고, 빈으로 등록하도록 지시하는 애노테이션입니다. 이를 통해 개발자는 일일이 빈을 설정 파일에 등록하지 않고도 자동으로 스캔되어 빈으로 관리됩니다.

 

@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}

이렇게 설정하면, com.example.myapp 패키지 및 그 하위 패키지에서 @Component, @Service, @Repository, @Controller 애노테이션이 붙은 모든 클래스를 스캔하여 빈으로 등록합니다.

 

 

 

 

 

빈의 스코프

빈의 스코프는 Spring 컨테이너가 관리하는 빈의 생명주기를 정의합니다. Spring에서 지원하는 빈 스코프에는 다음과 같은 것이 있습니다:

  1. Singleton (기본값): 컨테이너당 하나의 빈 인스턴스만 생성하여 공유합니다.
  2. Prototype: 빈 요청 시마다 새로운 인스턴스를 생성합니다.
  3. Request: HTTP 요청 당 하나의 빈 인스턴스를 생성합니다 (웹 애플리케이션 컨텍스트에서 사용).
  4. Session: HTTP 세션 당 하나의 빈 인스턴스를 생성합니다 (웹 애플리케이션 컨텍스트에서 사용).
  5. GlobalSession: 포털 환경에서 전역 세션 당 하나의 빈 인스턴스를 생성합니다 (잘 사용되지 않음).
  6. Application: 웹 애플리케이션 스코프. 서블릿 컨텍스트마다 하나의 빈을 생성합니다.
@Component
@Scope("prototype")
public class MyPrototypeBean {
    // ...
}

@Component
@Scope("singleton")
public class MySingletonBean {
    // ...
}

 

 

 

 

 

결합 예제

@ComponenScan과 빈 스코프를 함께 사용하는 예제를 들어보겠습니다

@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}
package com.example.myapp;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("prototype")
public class PrototypeBean {
    // ...
}

@Component
@Scope("singleton")
public class SingletonBean {
    // ...
}

이 설정으로, com.example.myapp 패키지에서 @Component가 붙은 PrototypeBean과 SingletonBean은 각각 프로토타입 스코프와 싱글톤 스코프로 스캔되어 빈으로 등록됩니다.

 

 

 

요약

  • @ComponentScan: 지정된 패키지에서 @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스를 스캔하고 빈으로 등록합니다.
  • 빈의 스코프: 빈의 생명주기를 정의하며, 기본값은 싱글톤입니다. 필요에 따라 다른 스코프를 설정할 수 있습니다.