본문 바로가기

Spring Boot

[Spring Boot] @Component와 @Configuration의 특징과 차이점

728x90

@Component

특징

  • 스캔 대상: @Component 어노테이션이 적용된 클래스는 Spring의 컴포넌트 스캔에 의해 자동으로 빈으로 등록됩니다.
  • 기능: @Component는 특별한 기능 없이 단순히 빈으로 등록되는 클래스에 사용됩니다.
  • 하위 어노테이션: @Component는 @Repository, @Service, @Controller와 같은 특정 목적을 가진 어노테이션들의 기본 어노테이션입니다.

사용 예제

import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Doing something in MyComponent");
    }
}

@Configuration

특징

  • 설정 클래스: @Configuration 어노테이션이 적용된 클래스는 Spring의 설정 클래스(configuration class)로 사용됩니다.
  • 빈 정의: @Configuration 클래스는 @Bean 어노테이션을 사용하여 메서드 수준에서 빈을 정의할 수 있습니다.
  • 프록시 설정: @Configuration 클래스는 프록시(proxy) 객체로 관리되어 메서드 호출 간의 싱글톤 보장이 됩니다.

사용 예제

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {

    @Bean
    public MyComponent myComponent() {
        return new MyComponent();
    }
}

차이점

  • 용도: @Component는 일반적으로 컴포넌트 스캔을 통해 빈으로 등록되는 클래스에 사용되며, @Configuration은 주로 설정 클래스에 사용됩니다.
  • 빈 등록 방식: @Component는 클래스 자체를 빈으로 등록하지만, @Configuration은 @Bean 메서드를 통해 빈을 등록합니다.
  • 싱글톤 보장: @Configuration 클래스는 내부적으로 프록시 객체를 사용하여 @Bean 메서드를 호출할 때마다 동일한 빈을 반환하도록 보장합니다.