Spring Bean에 대해

na.ram·2025년 7월 23일

Spring

목록 보기
13/13
post-thumbnail

🔎 Spring Bean?

기본 개념

Bean은 Spring IoC Container에 의해 관리되는 재사용 가능한 객체(POJO)를 의미합니다. 이러한 Bean들은 컨테이너에서 제공하는 구성 메타데이터(예를 들면 XML의 <bean/> 정의 형태)를 기반으로 생성됩니다.

Spring IoC Container에서 의존성 주입을 통해 Bean의 생명 주기를 관리하기 때문에 개발자가 객체의 생성과 소멸에 신경을 기울이지 않아도 됩니다. 이를 통해 구성 요소 간의 결합도를 낮추고, 어플리케이션을 보다 모듈화할 수 있습니다.


Spring Bean Scope

Bean Scope는 빈이 존재할 수 있는 범위를 의미하며 Singleton, Prototype, Request, Session 등이 있습니다.

  • Singleton : 어플리케이션 내 딱 하나의 빈만을 생성해 사용하며, 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프입니다.
  • Prototype : 요청이 들어올 때마다 새로운 빈을 생성해 사용하며, 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프입니다.
  • Request : 웹 요청이 들어오고 나갈때까지 유지하는 스코프입니다.
  • Session : 웹 세션이 생성, 종료할때까지 유지하는 스코프입니다.

주의할 점

Request, Session은 기본 ApplicationContext에서는 사용할 수 없고, web-aware ApplicationContext(ex XmlWebApplicationContext)에서만 지원됩니다.


Spring Bean 등록 방식

Component-Scan

Bean으로 등록될 준비를 마친 클래스들을 스캔하여 자동으로 등록해주는 것을 Component-Scan이라고 합니다.
Bean으로 등록될 준비를 마친 클래스들이라 함은 @Component 어노테이션과 이를 메타 어노테이션으로 포함한 모든 어노테이션이 붙어있는 클래스들을 의미합니다.

@Component

@Component 어노테이션이 선언된 클래스들은 기본적으로 빈으로 등록됩니다.
@Controller, @Service 등의 어노테이션들은 내부에 @Component를 메타 어노테이션으로 포함하고 있음을 확인할 수 있습니다.


직접 스프링 빈 등록

@Configuration, @Bean

클래스에 @Configuration 어노테이션, 메서드에 @Bean 어노테이션을 선언해 자바 클래스에서 직접 빈을 등록합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        ...
    }
}

@Configuration과 CGLIB

@Configuration은 클래스의 CGLIB를 사용해 싱글톤을 보장합니다.
그러므로 SecurityConfig가 빈으로 등록될 때, SecurityConfig 대신 SecurityConfig를 상속받은 SecurityConfig$CGLIB 형태의 프록시 객체가 등록됩니다.
@Bean이 등록된 메소드마다 이미 스프링 빈이 존재하면 존재하는 빈을 반환하고, 스프링 빈이 없으면 생성해서 스프링 빈으로 등록하고 반환하는 코드가 동적으로 만들어져 덕분에 싱글톤이 보장됩니다.


@Bean  Vs.  @Component

@Bean

  • 개발자가 컨트롤이 불가능한 외부 라이브러리들을 빈으로 등록하고 싶은 경우
  • 메소드 또는 어노테이션 단위에 선언 가능

@Component

  • 개발자가 직접 컨트롤이 가능한 클래스들의 경우
  • 클래스 또는 인터페이스 단위에 선언 가능

Spring Bean 생명주기

https://www.geeksforgeeks.org/java/bean-life-cycle-in-java-spring/

Singleton Bean

  1. Spring IoC Container 생성
  2. Spring Bean 생성
  3. 의존성 주입
  4. 초기화 콜백
  5. 사용
  6. 소멸 전 콜백
  7. 스프링 종료

초기화 콜백
Bean이 InitializingBean을 구현하거나 @PostConstruct 어노테이션이 붙은 메서드가 있으면 해당 메서드 호출

소멸 전 콜백
Bean이 DisposableBean을 구현하거나 @PreDestroy 어노테이션이 붙은 메서드가 있으면 ApplicationContext가 종료될 때 호출

Prototype Bean

  1. Spring IoC Container 생성
  2. Spring Bean 생성
  3. 의존성 주입
  4. 초기화 콜백
  5. 사용
  6. GC에 의해 수거

0개의 댓글