Spring

[Spring] @ComponentScan @Autowired 의존관계 자동 주입

lakelight 2022. 7. 12. 22:17
728x90
반응형

@ComponentScan

@Component 애노테이션이 붙은 클래스를 자동으로 스프링 빈으로 등록합니다.
해당 애노테이션이 붙어있는 클래스부터 하위로 탐색하면서 @ComponentScan의 대상을 찾습니다
그래서 @ComponentScan은 프로젝트가 실행되는 최상단에 두는 것이 좋습니다.

스프링에서는 애플리케이션이 실행되는 {프로젝트이름}Application클래스 @SpringBootApplication을 확인해보겠습니다.

@SpringBootApplication 내부에 @ComponentScan이 있는 것을 확인 할 수 있습니다.
애플리케이션이 실행되면서 모든 @ComponentScan의 대상을 찾아서 빈으로 등록하고 @Autowired를 찾아 의존관계도 자동으로 주입해줍니다.

@SpringBootApplication에 @ComponentScan이 있는데 자바는 애노테이션의 상속을
지원하지 않기 때문에 이 기능은 스프링이 지원해주는 기능임을 인지해야합니다.

@ComponentScan 예시

@Component //@ComponentScan의 대상이 됩니다.
public class TodoServiceImpl implements TodoService{
    
    private final TodoRepository todoRepository;
    
    @Autowired 
    //TodoRepository에도 @Component를 써주어서 @ComponentScan 대상이 되게 하면
    //@Autowired를 통해 스프링이 자동으로 의존관계를 주입합니다. 
    //생성자를 통한 의존관계를 주입합니다.
    public TodoServiceImpl(TodoRepository todoRepository){
        this.todoRepository = todoRepository 
    }
}

 

@ComponentScan의 대상 종류

  • @Component
  • @Controller
  • @Service
  • @Repository
  • @Configuration

 

728x90
반응형