Spring

@Bean과 @Component의 차이

제주말차아몬드 2024. 8. 25. 15:16

언녕하세요 정만입니다~ 

@Bean과 @Component가 빈을 등록할 때 사용하는걸 알았지만 정확한 차이를 몰라 이번 기회에 정리해보았습니다.

 

💡 스프링 빈은 스프링 IoC(제어의 역전) 컨테이너가 생성하고 관리하는 객체로 애플리케이션의 구성 요소를 의미합니다. 스프링 IoC 컨테이너는 빈의 생명주기와 의존성을 관리하고 필요할 때 빈을 주입합니다.

 

@Bean

- 주로 @Configurartion이 붙은 클래스내에서 사용합니다.

- 특정한 객체의 생성 로직이 필요할 때나 외부 라이브러리의 객체를 빈으로 등록할 때 사용합니다.

- 주로 외부 라이브러리나 복잡한 초기화가 필요한 객체에 사용됩니다.

- 메서드 레벨에서 수동으로 빈을 정의하고 등록합니다.

@Configuration
public class AppConfig {

    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper();
    }
}

@Component

- 클래스 레벨에서 직접 사용됩니다.

- 스프링은 이 클래스 경로를 스캔하면서 자동으로 빈을 등록합니다.스프링의 컴포넌트 스캔 기능을 통해 자동으로 빈을 등록하고 싶을 때 사용합니다.

- 일반적인 스프링 관리 객체에 사용됩니다.

- 클래스 레벨에서 자동으로 빈을 등록합니다.

 

@Component
public class EmailService {

    public void sendEmail(String recipient, String message) {
    	...
    }
}

 

 

 

정리

  • @Bean과 @Component는 모두 스프링에서 빈을 등록하는 데 사용되지만 서로 다른 목적과 사용 방식을 가집니다.
  • @Bean은 특정 로직에 따라 빈을 수동으로 등록할 때사용하고  @Component는 스프링이 클래스 경로를 스캔하여 자동으로 빈을 등록할 때 사용됩니다