공부공부/Spring Boot

[Spring] @Component와 @Bean의 차이

이숭간 2021. 7. 14. 18:19
728x90

Bean에 대한 개념적 설명은 아래글을 참고해주세요!

https://esoongan.tistory.com/85?category=915638 

 

[Spring] 스프링 빈(Bean)이란?

atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88Bean%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%83%9D%EC%84%B1-%EC%9B%90%EB%A6%AC [Spring] 스프링 빈(Bean)의 개념과 생성 원리..

esoongan.tistory.com

@Component

@ComponentScan의 대상이 되는 어노테이션으로, 스프링 컨테이너의 관리대상이되고 빈으로 등록된다.

@Service, @Controller, @Repository도 모두 @Component를 내장하고있다.

@Component
public class MyBean {
    // ...
}

 

@Bean

@Configuration이 붙은 Spring을 설정하는 클래스내에 들어가는 메소드에서 주로 선언한다.

@Bean
public MyBean myBean() {
    return new MyBean();
}

만약 이때 생성자에 인자가 있는 상태면 그 인자또한 빈으로 등록되어있는지 확인한후에 객체를 리턴한다. 만약 빈에 없다면 에러가 발생한다.

 

그렇다면 @Component가 있음에도 @Bean이 존재하는 이유는 무엇일까?

예전에 스프링은 XML설정만 가능했고 3.0부터 어노테이션이 지원되었다.

XML을 사용하면 XML파일만 편집해서 설정을 바꿀 수 있고 따로 스캔할 필요가 없기때문에 어노테이션을 이용한 방법보다 빠르다는 장점이 있다.

 

즉 설정파일을 통해 빈을 관리해야할때면 설정파일에 해당하는 클래스내 메소드에 @Bean어노테이션을 사용할 수 있고,

간단하게 어노테이션기반으로 빈을 등록하고싶으면 @Component를 이용해서 스프링에게 등록해줘~ 라고 알려줄수 있는거당

 

# 스프링부트의 경우 @SpringBootApplication이 붙은 스프링 실행부에서도 @Bean어노테이션이 붙은 메소드를 사용할 수 있다!!

 

출처: https://velog.io/@composite/Spring-Component-Bean-%EC%95%8C%EA%B3%A0-%EC%93%B0%EA%B8%B0