프레임워크/Spring
#2 Spring Bean
Scala0114
2022. 4. 22. 20:27
1. Bean 이란?
- Spring에서 사용되는 POJO(Plain Old Java Object)의 일종
- Spring의 IoC 컨테이너가 관리하는 자바 객체
- Bean으로 등록한 객체는 IoC 컨테이너가 의존성을 주입해줄 수 있음
- @Controller, @Service, @Repository, @Component 등의 어노테이션이 붙은 클래스는 자동으로 Bean으로 등록
- @Configuration의 경우 내부에서 @Component를 사용
2. 특정 객체를 Bean으로 등록하는 방법
- @Component - 클래스를 Bean으로 등록
@Component public class MyBeanClass { ... }
- @SpringBootApplication내의 @ComponentScan이 처리될 때 자동으로 대상 클래스들을 Bean으로 등록
- 클래스 레벨의 어노테이션이기 때문에 클래스에만 사용 가능
- @Bean - 메소드의 반환 객체를 Bean으로 등록
@Configuration public class SpringConfiguration { @Bean public MyBeanClass myBeanClass { return new MyBeanClass(); } }
- @Configuration 어노테이션이 붙은 설정 클래스에서 @Bean 어노테이션을 사용하여 Bean 등록 가능
- @Configuration 클래스를 Component Scanning 하면서 @Bean 메소드의 반환값들이 Bean으로 등록됨
- 특정 객체를 반환하는 메소드에 @Bean을 붙이면 반환되는 인스턴스가 Bean으로 등록
- @Component vs @Bean
- @Component는 클래스 레벨에서, @Bean은 메소드 레벨에서 사용되는 어노테이션
- @Bean은 @Configuration 클래스 내에서 사용해야만 Bean 등록이 가능
- @Bean을 사용해야하는 경우?
- 외부 라이브러리 등에 정의된 객체이기에 클래스에 직접 @Component를 사용할 수 없을 경우
- 동적인 조건에 따라 특정한 구현체를 Bean으로 등록하도록 할 경우
- @Bean 등록을 명시적으로 하고싶을 경우