@Bean @Component 차이가..?

백엔드&인프라 추종자·2025년 3월 25일

스프링 공부

목록 보기
33/35

@Bean@Component는 둘 다 Spring Framework에서 빈(bean)을 등록하는 데 사용되지만, 그 사용 방식과 목적이 다릅니다. 각 어노테이션의 차이를 구체적으로 설명드리겠습니다.

1️⃣ @Bean

  • 주로 설정 클래스에서 사용됩니다.
  • 메소드 레벨에 적용되어 메소드의 반환 값을 Spring 컨테이너에 빈으로 등록합니다.
  • @BeanJava Config 스타일에서 사용되며, 직접 빈을 정의하는 방식입니다.
  • 주로 외부 라이브러리의 객체나, 특정 설정을 추가해야 하는 객체를 빈으로 등록할 때 유용합니다.

예시

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl(); // 빈으로 등록
    }
}

위 코드에서 myService() 메소드는 MyServiceImpl 객체를 생성하고 이를 Spring의 빈으로 등록합니다.

특징

  • 메소드 레벨에서 빈을 정의.
  • 외부 라이브러리 객체구성 설정이 필요한 객체에 주로 사용.
  • 명시적으로 객체를 생성하고 반환하기 때문에, 빈 정의가 명확하고 세밀한 제어가 가능합니다.

2️⃣ @Component

  • 클래스 레벨에 적용되어 해당 클래스를 Spring 컨테이너에 자동으로 빈으로 등록합니다.
  • 컴포넌트 스캔을 통해 Spring이 클래스들을 자동으로 스캔하여 빈으로 등록하는 방식입니다.
  • Spring은 기본적으로 @Component 어노테이션이 붙은 클래스를 스캔하여 빈으로 등록합니다. 이 외에도 @Service, @Repository, @Controller 등의 어노테이션이 @Component의 특성을 확장한 것입니다.

예시

@Component
public class MyServiceImpl implements MyService {
    // 구현 내용
}

위 코드에서 MyServiceImpl 클래스는 자동으로 Spring 컨테이너에 빈으로 등록됩니다. 별도로 @Configuration이나 @Bean을 사용하지 않고, 클래스가 스캔 대상에 포함되면 자동으로 빈이 등록됩니다.

특징

  • 클래스 레벨에서 빈을 정의.
  • 자동 스캔을 통해 빈을 등록하기 때문에, 클래스에 어노테이션을 붙이기만 하면 Spring이 자동으로 빈을 관리합니다.
  • 명시적인 설정 없이 자동 빈 등록이 가능하므로, 일반적으로 간편한 빈 등록에 사용됩니다.

3️⃣ 주요 차이점 정리

특성@Bean@Component
적용 위치메소드 레벨클래스 레벨
주용도외부 라이브러리나, 세부 설정이 필요한 빈 등록클래스 자동 등록
등록 방식수동으로 객체를 생성하고 반환하여 빈 등록Spring이 클래스 스캔을 통해 자동 등록
유연성더 세밀한 제어가 가능자동 빈 등록으로 간단하고 빠름

4️⃣ 결론

  • @Bean은 주로 Java Config 방식에서 메소드를 통해 빈을 정의하고 세밀하게 제어할 수 있을 때 사용됩니다. 외부 라이브러리 객체나 설정이 필요한 경우에 유용합니다.
  • @Component자동 빈 등록을 위해 사용되며, 일반적으로 Spring이 제공하는 자동 스캔 기능을 통해 빈을 등록하고 관리합니다. 코드에서 어노테이션을 추가하는 것만으로 빈을 등록할 수 있어, 편리하고 간단합니다.

따라서, @Bean@Component사용 목적과 등록 방식이 다르므로, 상황에 따라 적절히 선택하여 사용하는 것이 좋습니다.

profile
AI 답변 글을 주로 올립니다.

0개의 댓글