@Bean과 @Component?

요닝·2024년 5월 23일
0
post-thumbnail

공부하면서 헷갈리거나 놓쳤던 부분을 정리하고 있습니다.φ(・ω・` )


김영한님의 스프링 입문 강의를 복습하면서 Bean과 Component에 대해 자세히 알고 싶어졌다.

스프링의 특징 중 하나는 제어의 역전 즉 IoC인데,
IoC란 간단히 말하자면 개발자 대신 스프링이 객체를 관리해준다는 것이다.

그러기 위해서는 객체들이 Bean으로 등록되어있어야 한다.

빈으로 등록하는 방법중
@Bean과 @Component의 차이에 알아볼 것이다.


@Bean

  • 메소드 레벨에서 사용된다
  • 주로 설정클래스에서 사용된다
  • 빈의 생성, 초기화 설정, 즉 복잡한 초기화 로직을 세밀하게 제어할 수 있다
  • 외부 라이브러리 빈을 등록할 때 유용하게 사용된다
예시코드
@Configuration
public Class AppConfig {
	@Bean
    public PaymentProcessor cardPaymentProcessor() {
    	return new CardPaymentProcessor();
	}
}

@Component

  • 클래스 레벨에서 사용된다
  • 개발자가 작성한 클래스를 빈으로 등록할 때 사용한다
  • @Controller, @Service, @Repository 등의 어노테이션도 @Component를 확장해 런타임시 자동으로 빈으로 등록된다
  • 스프링의 컴포넌트 스캔에 의해 자동으로 감지되고 등록된다
예시코드
@Component
public Class CardPaymentProcessor implements PaymentProceesor {
	//생략
}

빈으로 설정한다는 점은 동일하지만, 사용되는 레벨과 목적에서 차이점이 있다!

controller의 내부에는 @Component가 포함되어있어서 자동으로 감지된다 (serivce, repository도 동일하다)

컨트롤러 내부 예시

profile
백엔드 개발자 (ง •̀ω•́)ง✧

0개의 댓글