[Spring] 컴포넌트, Component

스프링의 Component

Component Scan은 DI와 함께 사용되는 추가 기능이다.

@ComponentScan

Component Scan은 스프링이 직접 클래스를 검색해서 Bean으로 등록해주는 기능이다. 설정 클래스에서 Bean으로 등록하지 않아도 원하는 클래스를 Bean으로 등록할 수 있게된다.

@Component Scan을 붙여야, 스프링이 검색해서 Bean으로 등록할 수 있다. class에 @Component를 추가하면 클래스 이름의 첫 문자를 소문자로 바꾼 이름으로 Bean 등록을 해준다. (MemberService Class -> memberService Bean)

@Component

Component Scan의 대상으로 지정한다.
객체를 생성해서 Bean으로 등록할 Class임을 나타낸다.
@Component를 사용하면 설정 클래스에서 직접 Bean으로 등록하지 않아도 된다.

기본 Scan 대상

  1. @Component
  2. @Controller
  3. @Service
  4. @Repository
  5. @Aspect
  6. @Configuration

Annotation

이름 설명
@Configuration 해당 클래스를 스프링 설정 클래스로 지정
@Bean 해당 메서드가 생성한 객체를 스프링이 관리하는 빈 객체로 등록
@Autowired 의존 관계에 해당하는 타입의 빈을 찾아서 필드에 할당한다.
의존 관계를 설정 클래스에서 명시하지 않아도 된다.
메서드에 붙은@Autowired는 해당 메서드의 파라미터 타입에 해당하는 Bean 객체를 찾아서 인자로 주입한다.
@Qualifier @Autowired에 의해 자동 주입되는 객체가 여러 개인 경우 하나를 특정하기 위해서 사용한다.
A 타입의 객체를 DI해야하는 경우, A 타입의 객체뿐만 아니라 A타입을 상속한 AA타입의 객체도 DI의 대상이 되어 충돌이 난다.
이러한 경우 하나를 특정하기 위해서 사용한다.
@Component Component Scan의 대상으로 지정한다.
객체를 생성해서 Bean으로 등록할 Class임을 나타낸다.
@Component를 사용하면 설정 클래스에서 직접 Bean으로 등록하지 않아도 된다.
@ComponentScan 설정 클래스에 @Component를 붙혀야, 클래스를 스캔해서 스프링 Bean으로 등록할 수 있다.
@ComponentScan(basePackages = {‘spring’}은 spring 패키지와 그 하위에 속한 클래스를 스캔 대상으로 설정한다.
스캔 대상에 해당하는 클래스 중에서 @Component가 붙은 클래스의 객체를 생성해서 Bean으로 등록한다.

Reference

  • 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문, 최범균

Leave a comment