[Spring] @Component와 @Bean의 차이
Bean에 대한 개념적 설명은 아래글을 참고해주세요!
https://esoongan.tistory.com/85?category=915638
@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