Spring

[ spring ] @Component 와 @Configuration

인생은단짠단짠 2022. 12. 16. 13:52

 

@Component 

"이 클래스는 커스텀 빈이다"

  • @ComponentScan 을 통해 검색된다.
    • @SpringBootApplication에 래핑 되어 있기에 일반적으로는 신경 쓰지 않아도 된다.

 

  • 용도에 맞춘 스테레오 타입의 어노테이션을 가지고 있다.
    • @Controller @Service @Repository @Configuration
    • 가능하면 스테레오 타입을 사용한다.

 

  • Class-level annotation이다.
    • @Component는 등록하려는 Bean의 클래스 소스가 편집 가능한 경우(개인이 직접 만든 클래스)에 사용한다. 

 

@ Bean

  • Method - level annotaion이다.
  • 인스턴스화 하는 코드가 수동으로 작성됨으로 외부 라이브러리나 써드파티 클래스도 Bean으로 등록이 가능하다.

 

 

@Configuration

"이 클래스는 각종 빈 설정을 담고있다."

  • @ComponentScan 을 통해 검색된다.
    • @Configuration 도 @Component의 한 종류이기 때문이다.

 

  • 안의 빈 설정(메서드)를 읽어서 스프링 컨테이너에 등록한다.
  • 각종 스프링 인터페이스의 구현에 함께 활용된다.

 

얼핏 보면 비슷해 보이지만, 빈을 생성하는 방법에 차이가 있다.

 


 

 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