일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Request flow
- OSIV
- 컴포넌트스캔
- Batch
- 가변 객체
- Spring Batch
- 스프링 빈
- 불변 객체
- 생성자 주입
- Handler Adepter
- Spring Framework
- 싱글 스레드
- spring boot
- @FunctionalInterface
- Dispatcher Servlet
- mavenCentral
- 메서드 주입
- @Configuration
- 빈
- View Resolver
- 필드 주입
- 익명 함수
- Open EntityManager In View
- @componentScan
- 일괄처리
- open-in-view
- @Bean
- open session in view
- 이펙티브 자바
- 참조 타입
- Today
- Total
보다 더 나은 내일의 나를 위해
[Spring Boot] @Component와 @Bean의 차이는? 본문
개요
빈 클래스에 @Component 어노테이션을 사용하는 것과 @Configuration 클래스에서 @Bean으로 빈 클래스를 등록하는 것 모두 스프링 빈에 클래스를 등록하는 동작을 하는 어노테이션입니다. 그렇다면 @Component와 @Bean의 차이는 무엇일까요?
@Component
기본적으로 @Component 어노테이션은 빈 클래스 위에 사용해 빈에 등록하는 기능을 합니다.
@Component
public class MyClass {
...
}
위 코드처럼 작성하게 되면 MyClass 객체가 스프링 빈에 등록됩니다.
@Controller와 @Service 등은 @Component를 포함하고 있으므로 따로 명시해 주지 않아도 스프링 빈에 등록됩니다.
@Component를 사용하게 되면 @SpringBootApplication 안에 있는 @ComponentScan을 통해서 빈에 객체가 등록됩니다.
@Bean
@Bean 어노테이션은 빈 설정 파일에 직접 빈으로 등록하는 기능을 합니다.
@Bean 은 @Configuration이 사용된 클래스 내에서 메서드에 붙여 사용합니다.
@Configuration
public class MyConfiguration {
@Bean
public MyBeanClass myBeanClass() {
return new MyBeanClass;
}
}
@Bean을 사용하면 패턴 추가, 전략 설정 등 유연하게 빈을 등록할 수 있습니다.
이때 @Configuration 어노테이션이 @Component 어노테이션을 사용하고 있으므로 @ComponentScan의 대상이 되기 때문에 빈에 등록할 수 있습니다.
결론
@Component는 클래스에 사용되어 컴포넌트 스캔을 통하여 자동으로 빈을 등록하는 어노테이션입니다.
@Bean은 메서드에 사용되어 개발자가 수동으로 빈으로 등록하는 어노테이션이며, @Component 보다 더 유연하게 사용할 수 있습니다. 또한 @Component를 사용하는 @Configuration이 붙은 클래스 안에서 사용하므로 컴포넌트 스캔의 대상이 되어 빈에 등록할 수 있습니다.
'spring' 카테고리의 다른 글
DI[Dependency Injection] - @Autowired와 생성자 주입의 차이점 (0) | 2022.06.29 |
---|---|
[Spring Boot] Interceptor와 Filter는 어떤 게 다를까? (0) | 2022.06.27 |
@Service를 record 클래스로 작성해도 괜찮을까? (0) | 2022.06.20 |
Spring MVC 요청 흐름 (0) | 2022.06.02 |