@Component와 @Bean

바그다드·2023년 7월 13일

스프링에서 관리하는 객체를 스프링 빈이라고 한다.
@Controller, @Service이 붙은 클래스도 스프링 빈이라고 하는데, 스프링 빈으로 등록하기 위해서는 @Component어노테이션을 붙여줘야 한다.

  • @Controller, @Service도 클래스를 확인해보면 @Component를 포함하고 있는 것을 확인할 수 있다.

그런데 Config같은 설정 클래스에서 스프링 컨테이너에 빈을 등록할 때는 @Bean을 사용하는데, 그럼 @Component와 @Bean은 무슨 차이가 있는걸까?

@Component VS @Bean

ComponentBean
사용처클래스 레벨에서 선언메서드 레벨에서 선언
적용 난이도클래스에 어노테이션만 붙이면 됨Bean을 생성하기 위해서는 코드를 전부 작성해야 함
Autowiring필드,setter,생성자 주입 가능메서드를 호출하거나 파라미터명을 통해 호출 가능
빈 생성자Spring에서 관리
컴포넌트 스캔에 의해 등록되고 주입됨
개발자가 직접 비즈니스 로직을 작성하고 빈을 반환
Recommended for내가 작성한 코드를 빈으로 등록할 때
대부분의 경우 @Component가 권장됨
1: 특정 비즈니스 로직을 생성할때
2: 제3자 라이브러리 bean을 인스턴스화 할 때
  • 일반적으로 @Component를 사용하지만, Spring Security 등 제3자 라이브러리에 대한 Bean을 인스턴스화 하거나, bean을 생성하기 전에 수행해야 할 비즈니스 로직이 있을 경우에 @Bean을 사용하는 것을 권장한다.
profile
꾸준히 하자!

0개의 댓글