본문 바로가기

프레임워크(Framework)/Spring

@Comonent? @ComponentScan? @Autowired?

어제 배운 IoC, DI와 오늘 배운 @Component, @ComponentScan, @Autowired를  연관지어 정리해보자.

 

스프링 빈 즉, 스프링이 컨테이너에 담아두는 객체로 등록하는 방법은 크게 두 가지가 있다.

 

1. @Component

2. @Configuration + @Bean

=> 사실상 Configuration 자체에 Component가 포함되어 있기에 1 방법이 메인이다.

 

그럼 @ComponentScan은 무엇일까?

말 그대로 컴포넌트를 스캔한다.

즉, 스프링은 프로젝트를 스캔하며 '컴포넌트 어디에 적어놨니?'라고 물으며 자신의 컨테이너에 객체를 담는다.

 

사실 알다시피 컴포넌트 스캔은 원래 xml에서 하던 일이다.

하지만 spring은 이 과정을 알아서 해준다. 역시 똑똑이...ㅎㅎ

 

마지막으로 @Autowired란 무엇일까?

@Autowired는 DI와 연관이 있다.

 

어제 우리가 정리한 것처럼 IoC(Inversion of Control)가 있기에 DI(Dependency Injection)는 필요하다.

즉 의존성 주입 과정이 필요하다.

 

1. 생성자로 주입

2. 필드로 주입

3. Setter로 주입 

 

우리는 필요한 의존 객체의 '타입'에 해당하는 빈을 컨테이너에서 찾아서 주입해야 한다. 

'야 너 이거 꺼내줄게~'라고 생각하면 쉽다.!!

 

결국 IoC, DI와 오늘 배운 @Component, @ComponentScan, @Autowired를 모두 연관지어 정리해보면,

 

IoC를 통해서 우리는 스프링한테 객체의 생성주기와 호출에 대한 제어권을 넘김

=> 스프링이 그 객체를 인식하기 위해서 @Component를 달아 놓음

=> @ComponentScan을 하며 스프링 빈 객체를 싱글톤 패턴으로 생성한 후 스프링 컨테이너에 담는다.

=> @Autowired를 달아서 의존성을 주입

 

 

 

오늘도 스프링 뿌셨다...휴~

 

 

 

'프레임워크(Framework) > Spring' 카테고리의 다른 글

DTO는 왜? 언제 사용할까?  (0) 2024.07.22
Setter 왜 쓰는지 알고 사용하자!  (0) 2024.07.20
스프링 Core?  (1) 2024.07.16
SOLID?  (0) 2024.07.16
[주문을 JAVA]KPT 회고  (0) 2024.07.15