
@Component
"이 클래스는 커스텀 빈이다"
@ComponentScan을 통해 검색된다.- @SpringBootApplication에 래핑 되어 있기에 일반적으로는 신경 쓰지 않아도 된다.
- 용도에 맞춘 스테레오 타입의 어노테이션을 가지고 있다.
- @Controller @Service @Repository @Configuration
- 가능하면 스테레오 타입을 사용한다.
- Class-level annotation이다.
- @Component는 등록하려는 Bean의 클래스 소스가
편집 가능한 경우(개인이 직접 만든 클래스)에 사용한다.
- @Component는 등록하려는 Bean의 클래스 소스가
@ Bean
- Method - level annotaion이다.
- 인스턴스화 하는 코드가 수동으로 작성됨으로
외부 라이브러리나 써드파티 클래스도 Bean으로 등록이 가능하다.
@Configuration
"이 클래스는 각종 빈 설정을 담고있다."
@ComponentScan을 통해 검색된다.- @Configuration 도
@Component의 한 종류이기 때문이다.
- @Configuration 도
- 안의 빈 설정(메서드)를 읽어서 스프링 컨테이너에 등록한다.
- 각종 스프링 인터페이스의 구현에 함께 활용된다.
얼핏 보면 비슷해 보이지만, 빈을 생성하는 방법에 차이가 있다.
Bean을 생성하는 방법
1. @Component
@Component
public class SimpleComponent {
}
2. @Bean (in @Configuration)
@Configuration
public class SimpleConfigBean {
@Bean
public SimpleClass1 simpleComponent1() {
return new SimpleClass1();
}
}
3. @Bean (in @Component): Lite Mode
@Component
public class SimpleComponentBean {
@Bean
public SimpleClass2 simpleComponent2() {
return new SimpleClass2();
}
}
Spring에서는 기본적으로 Bean을 등록할 때 proxy를 사용한다.
하지만 Lite Mode 는 실제 인스턴스를 생성하기에 proxy 가 필요한 Spring 기능들을 사용할 수 없다.(AOP 등)
Spring을 사용하기 때문에 Component안에 빈을 등록하는 방식은 Spring 사용의도에 맞는 방식은 아니라 거의 사용하지 않겠지만 필요할 때가 있을 수 있다. 따라서 이 차이를 알고 필요한 곳에서만 특정 목적으로 사용해야 한다.
정리하면, 빈 설정은 @ Configuration, 클래스 빈 등록은 @Component이다.
사실 @Configuration 과 @Component를 혼용해서 써도 돌아는 간다.
그러나 정확한 목적을 모르고 쓰면 언젠간 터지게 되어있다.. 그래서 어노테이션을 의도에 맞게 사용하려고 해야 한다.
'Spring' 카테고리의 다른 글
| [ Spring ] 트랜잭션 (0) | 2022.12.12 |
|---|---|
| [ Spring ] 의존성 주입 방법 (feat.lombok) (0) | 2022.11.23 |
| [ Spring ] Swagger이란 (0) | 2022.11.17 |
| [ Spring ] restTemplate (0) | 2022.11.11 |
| [spring] 어노테이션 (Annotaions) (0) | 2022.11.04 |