본문 바로가기

개발일기/Spring

[Spring]@ComponentScan , @Component , @Autowired

728x90
반응형

Bean을 등록 할때 @Bean을 사용하여 Bean을 수동으로 등록하는 방법이 있다.

하지만 Spring Framework에서는 Bean을 자동으로 컨테이너에 등록해주는 좋은 애노테이션이 존재한다.

 

  1. @ComponentScan: Spring이 컴포넌트(빈)를 찾을 위치를 지정하는 애노테이션이다. 이 애노테이션을 사용하면 지정된 패키지부터 하위 패키지까지 스캔하여 @Component, @Service, @Repository, @Controller 등과 같은 애노테이션이 붙은 클래스를 찾아 빈으로 등록한다.
  2. @Component: Spring에서 관리하는 빈으로 등록하고 싶은 클래스에 붙이는 애노테이션이다. 이 애노테이션이 붙은 클래스는 Spring에 의해 빈으로 관리되며, @ComponentScan에 의해 자동으로 스캔될 수 있다.
  3. @Autowired: 의존성 주입을 위해 사용되는 애노테이션으로, 해당 타입의 빈을 필드, 생성자, setter 등에 주입할 수 있도록 지정한다. 스프링은 @Autowired가 붙은 필드나 생성자의 파라미터를 보고 적절한 빈을 찾아서 주입한다.

 

#세개의 애노테이션을 함께 사용하는 예제를 살펴보면,

 

// Application.java
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.example") // @ComponentScan 애노테이션으로 com.example 패키지부터 컴포넌트 스캔을 시작합니다.
public class Application {
    // 설정 클래스
}

# @ComponentScan을 이용하여 @Coponent 애노테이션을 지정한 class를 찾아서 Bean으로 등록한다.

# basePackages는 Scan할 범위를 지정하는것이다. 해당 옵션을 추가하지 않는다면 전체 class 및 라이브러리까지 모두 Scan 하기때문에 성능면에서 좋지 않을수 있다.

 

// UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component // @Component 애노테이션으로 UserController 클래스를 빈으로 등록합니다.
public class UserController {
    private UserService userService;

    @Autowired // @Autowired 애노테이션으로 UserService의 의존성을 주입합니다.
    public UserController(UserService userService) {
        this.userService = userService;
    }

    public void addUser() {
        userService.addUser();
    }
}

 

# @Component를 붙여 @ComponentScan으로 찾을 수 있도록 지정한다.

# @Autowired를 이용하여 해당 type에 맞는 것을 찾아 의존성을 자동으로 주입한다.

728x90
반응형