본문 바로가기
Spring

[Spring] @Bean vs @Component

by SpearZero 2020. 8. 2.

@Bean vs @Component

스프링 코어 강의를 보던중 스프링에서 자바 클래스를 빈(Bean) 객체로 등록하기 위해 사용하는 두 가지 어노테이션이 있다고 했다. @Bean과 @Component 어노테이션인데, 강의에서는 어노테이션 사용법만 알려주고 두 어노테이션의 차이점을 알려주지 않아서 차이점을 알아보기로 했다.

@Bean

@Configuration
public class TestConfig {

  @Bean
  public ArrayList<Integer> listBean() {
    return new ArrayList<Integer>();
  }
}

@Component

@Configuration
@ComponentScan(basePackages = "com.springex.college")
public class TestConfig {

}
@Component
public class College {

}

차이점

  • @Component
    • 컴포넌트 스캔을 통해 자동으로 빈이 탐색되고 등록된다.
    • @Component 어노테이션이 선언된 클래스와 빈 사이의 묵시적인 매핑이 있다
  • @Bean
    • 자동으로 빈 설정을 해주는 @Component 어노테이션과 달리 빈을 명시적으로 선언한다.
    • 클래스 정의와 빈 설정을 분리하기 때문에 개발자가 빈 객체를 생성하고 설정하는것을 선택할 수 있다.
    • @Component 어노테이션을 사용할 수 없는 클래스(개발자가 통제할 수 없는 외부 라이브러리 등)에 사용한다.
    • 상황에 따라 구현 클래스를 변경해야 할 때 사용(Repository를 다른 Repository로 변경 할 때)

참고