Bean/Component 어노테이션에 대한 설명과, 둘의 차이점

jaeyong Lee·2024년 8월 4일

둘 다 스프링컨텍스트에 빈을 등록하고 관리한다.

차이점

컴포넌트 : Class level 에서 사용됨

@component : 모든 스프링 빈에 사용할 수 있는 일반적인 어노테이션
@Service,@Repository,@Controller,@RestController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    private final MyService myService;

    @Autowired
    public MyComponent(MyService myService) {
        this.myService = myService;
    }


}

--> 클래스 레벨에 사용

빈 : Method level 에서 사용됨

이 설정 클래스는 보통 @Configuration 어노테이션으로 정의된다.

@Configuration, @Bean

ex) 예를들면 api 기본 설정 값을 빈(객체)으로 만들어 필요할 때마다 꺼내쓰고 싶으면 @Configuration 클래스안에 @Bean 메서드 만들어서 런타임시 필요할 때마다 호출한다.

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

실행 방식

<context:component-scan> 태그는 @Component와 그 특화 어노테이션뿐만 아니라 @Configuration 어노테이션이 붙은 클래스도 스캔하고, 스프링 컨텍스트에 자동으로 등록한다

※주의1)
@bean은 런타임중에 만들어져서 사용된다. 스캔은 @Configuration까지이다.

정리)

사실 bean이든, componenet든 간에 사용목적은 같다.
클래스레벨에서 구현할것이냐, 메서드 레벨에서 구현할 것이냐 그 차이

0개의 댓글