[Spring] @Component, @Bean

jhkim·2023년 3월 19일
0

스프링 빈이란?

=스프링의 DI 컨테이너(IoC컨테이너)가 관리하는 POJO

❓POJO❓
특정 기술에 종속되지 않은 순수한 자바 객체
객체지향적인 원리에 충실하면서, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

❓IoC컨테이너❓
의존성을 관리하고, 객체를 생성 및 관리하는 컨테이너
인스턴스의 생성부터 소멸까지의 생명주기 관리를 개발자 대신 해준다.
객체를 관리하는 주체가 개발자->프레임워크가 되어 개발자는 로직에 집중할 수 있다.



@Component

싱글톤 빈을 생성하는 어노테이션
개발자가 직접 작성한 class를 Bean으로 등록하는 어노테이션이다.
이 어노테이션이 붙은 클래스들은 ❗컴포넌트 스캔을 통해서 자동으로 빈으로 등록된다.
(@Scope어노테이션을 통해 싱글톤이 아닌 빈을 생성할 수도 있다)

@Controller, @Service, @Repository도 @Component어노테이션을 포함하고 있다.
즉 @Component어노테이션이 구체화된 형태



@Bean, @Configuration

@Bean을 사용하는 경우

  • 개발자가 직접 제어할 수 없는 외부 라이브러리 등을 Bean으로 만드려고 할 때
  • 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
  • 다형성을 활용하여 여러 구현체를 등록해주어야 할 때

name옵션을 사용하지 않으면 method이름을 camelCase로 변경한 것이 bean id로 등록된다.

PasswordEncoder등을 @Bean으로 등록한다.

@Bean 어노테이션을 쓰는 클래스에서는 @Configuration 어노테이션을 활용해서 해당 클래스에서 Bean을 사용하고자 함을 명시해야 한다.
(그래야 싱글톤을 보장받을 수 있다.)
❗수동으로 스프링 컨테이너에 빈을 등록하는 방식이다.❗


[참고]

POJO: https://siyoon210.tistory.com/120

0개의 댓글