SpringBoot

@Bean의 의미와 사용 방법

초코너무조코 2025. 3. 5. 10:59
728x90

목적과 기능

@Bean은 메소드 레벨 어노테이션으로, 해당 메소드가 Spring 컨테이너에 의해 관리될 빈을 생성한다는 것을 선언합니다. XML 설정의 <bean/> 요소와 직접적으로 대응됩니다.

주요 특징

  1. 빈 정의: @Bean으로 어노테이션된 메소드가 반환하는 객체는 Spring 애플리케이션 컨텍스트에 빈으로 등록됩니다.
  2. 설정 컨텍스트: @Bean 메소드는 주로 @Configuration 어노테이션이 붙은 클래스 내에서 선언됩니다. 이는 해당 클래스가 빈 정의의 소스임을 나타냅니다.
  3. 커스터마이제이션: 프로그래밍 방식으로 빈을 생성하고 구성할 수 있어, 인스턴스화와 초기화 과정을 세밀하게 제어할 수 있습니다.

사용법과 이점

의존성 주입

@Bean 메소드는 매개변수를 받을 수 있어, 빈 간의 의존성을 정의할 수 있습니다.

@Bean public TransferService transferService(AccountRepository accountRepository)
{ return new TransferServiceImpl(accountRepository); }

 

생명주기 관리

initMethod와 destroyMethod 속성을 사용하여 빈의 초기화 및 소멸 메소드를 지정할 수 있습니다.

@Bean(initMethod = "init", destroyMethod = "cleanup") 
public SampleBean sampleBean() { return new SampleBean(); }

 

이름 지정

기본적으로 빈 이름은 메소드 이름과 같지만, 사용자 지정 이름을 지정할 수 있습니다.

@Bean(name = "myCustomBean")
public MyBean myBean() { return new MyBean(); }

 

스코프 지정

 @Scope 어노테이션과 함께 사용하여 빈의 스코프를 정의할 수 있습니다

@Bean @Scope("prototype")
public Encryptor encryptor() { return new Encryptor(); }

 

@Component와의 차이점

 

@Component는 빈의 자동 감지와 자동 구성에 사용되지만, @Bean은 다음과 같은 몇 가지 장점을 제공합니다.

  • 외부 클래스: @Component를 추가하기 위해 소스를 수정할 수 없는 외부 라이브러리의 클래스로부터 빈을 생성할 수 있습니다.
  • 조건부 빈 생성: 빈을 생성할지 또는 어떤 유형의 빈을 생성할지 결정하기 위해 조건부 로직을 사용할 수 있습니다.
  • 커스터마이제이션: Spring 컨테이너에 의해 완전히 생성되고 관리되기 전에 빈 인스턴스를 커스터마이즈할 수 있는 유연성을 제공합니다.

요약하면, Spring Boot의 @Bean은 프로그래밍 방식으로 빈을 정의하는 강력하고 유연한 방법으로, Spring IoC 컨테이너 내에서 빈 생성과 구성을 세밀하게 제어할 수 있게 해줍니다.

728x90

'SpringBoot' 카테고리의 다른 글

@Configuration과 ApplicationContext  (0) 2025.03.05
@RestController 애너테이션  (0) 2025.03.04
Thymeleaf  (2) 2025.03.04
SpringBoot에서 사용할만한 모니터링 도구 비교  (0) 2025.03.04