스프링 빈이란?
=스프링의 DI 컨테이너(IoC컨테이너)가 관리하는 POJO
❓POJO❓
특정 기술에 종속되지 않은 순수한 자바 객체
객체지향적인 원리에 충실하면서, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트
❓IoC컨테이너❓
의존성을 관리하고, 객체를 생성 및 관리하는 컨테이너
인스턴스의 생성부터 소멸까지의 생명주기 관리를 개발자 대신 해준다.
객체를 관리하는 주체가 개발자->프레임워크가 되어 개발자는 로직에 집중할 수 있다.
@Component
싱글톤 빈을 생성하는 어노테이션
개발자가 직접 작성한 class를 Bean으로 등록하는 어노테이션이다.
이 어노테이션이 붙은 클래스들은 ❗컴포넌트 스캔을 통해서 자동으로 빈으로 등록된다.❗
(@Scope어노테이션을 통해 싱글톤이 아닌 빈을 생성할 수도 있다)
@Controller, @Service, @Repository도 @Component어노테이션을 포함하고 있다.
즉 @Component어노테이션이 구체화된 형태
@Bean, @Configuration
@Bean을 사용하는 경우
name옵션을 사용하지 않으면 method이름을 camelCase로 변경한 것이 bean id로 등록된다.
PasswordEncoder등을 @Bean으로 등록한다.
@Bean 어노테이션을 쓰는 클래스에서는 @Configuration 어노테이션을 활용해서 해당 클래스에서 Bean을 사용하고자 함을 명시해야 한다.
(그래야 싱글톤을 보장받을 수 있다.)
❗수동으로 스프링 컨테이너에 빈을 등록하는 방식이다.❗