쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • GitHub
  • 재귀
  • JPA
  • querydsl
  • 자바
  • 스프링부트
  • REST API
  • Spring
  • 스프링
  • java
  • 백준
  • 알고리즘
  • MVC
  • 자료구조
  • 깃허브
  • http
  • springboot
  • 함수형인터페이스
  • SQL
  • Git

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[Spring 입문] 컴포넌트 스캔과 자동 의존관계 설정
[ Spring ]/Spring 입문

[Spring 입문] 컴포넌트 스캔과 자동 의존관계 설정

2022. 2. 14. 16:07
728x90

 

 

1. 스프링 빈 등록하는 2가지 방법 

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기

 

 

2. 컴포넌트 스캔과 자동 의존관계 설정

2-1 컴포넌트 스캔을 통해 자동으로 스프링 빈 등록

🔍 정의

  • 컴포넌트 스캔(Component Scan)이란,  @Component 애노테이션을 가진 모든 대상을 빈으로 등록하기 위해 찾는 과정이다.
  • 빈 설정 파일 또는 @Bean 애노테이션을 통해 빈을 하나하나 지정할 필요가 없다.

 

🔍 특징

  • 빈 이름 기본 전략 : 가장 앞 문자를 소문자로 바꾼 것이 빈 이름이 된다.
    • ex) MemberServiceImple → memberServiceImple
  • 빈 이를을 수동으로 지정할 수 있다.
    • @Component("지정할_이름")
  • 기본적인 컴포넌트 스캔 대상
    • @Component : 컴포넌트 스캔에서 사용
    • @Controller : 스프링 MVC 컨트롤러에서 사용
    • @Service : 스프링 비즈니스 로직에서 사용
    • @Repository : 스프링 데이터 접근 계층에서 사용
    • @Configuration : 스프링 설정 정보에서 사용
  • 컴포넌트 스캔 범위
    • @ComponentScan 애노테이션이 있는 파일의 패키지 아래를 찾는다.
      • 스프링 부트에서는 @SpringBootApplication 애노테이션이 @ComponentScan 애노테이션을 포함하고 있어서 @SpringBootApplication 애노테이션이 있는 파일의 패키지 아래를 찾는다.
    • basePackages 또는 basePackageClasses 로 스캔 범위를 따로 지정 가능하다.
    • 권장 방법 : @ComponentScan 애노테이션이 있는 파일을 프로젝트 폴더의 최상단에 둘 것
      • 스프링 부트를 사용하면 @SpringBootApplication 애노테이션이 있는 파일이 자동으로 프로젝트 폴더의 최상단에 위치하고 있다.

 

🔍 주의할 점

  • DiscountPolicy 인터페이스를 상속 받는 RateDiscountpolicy 클래스와 FixDiscountpolicy 클래스가 있을 때, 둘 중 내가 사용할 것만 빈에 등록해야하기 때문에 한 곳에만 @Component 애노테이션을 붙여야한다.
  • 아니면 두 클래스에 모두 @Component 애노테이션을 붙이고 @Qulifier 또는 @Primary를 사용해서 우선순위를 지정할 수 있다.
  • 수동 빈 등록 vs 자동 빈 등록
    • 자동으로 빈을 등록한 상태에서 수동 등록 파일과 이름이 겹칠 경우에는 수동 빈 파일이 우선권을 가진다.
    • 그러나 최근 스프링 부트에서는 빈 이름 중복시 오류로 처리하고 있다.

 

 

 

2-2 자동 의존 관계 설정 (Auto Dependency Injection)

🔍 정의

  • 의존관계 주입을 스프링 컨테이너에서 등록된 빈을 찾아서 설정하는 방법이다.

 

🔍 설명

  • 스프링 빈 설정 파일이 없어진다면 해당 파일에서 해주던 의존관계 주입을 해주는 것이 필요하다.
    • @Autowired 애노테이션을 사용하면 된다.

 

🔍 원리

  • 스프링 컨테이너가 @Component 애노테이션을 찾아서 모두 스프링 빈으로 등록한다.
  • 의존성이 필요한 부분에서 @Autowired 애노테이션이 있다면 등록된 스프링 빈에서 찾아서 의존관계를 주입해준다. 

 

참고) 스프링 컨테이너는 빈을 싱글톤으로 관리한다.

  • 스프링에 스프링 빈을 등록할 때 기본으로 싱글톤으로 등록한다.
  • 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
  • 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.

 

 

3. 자바 코드로 직접 스프링 빈 등록하기

  • 메서드 위에 @Bean 애노테이션을 붙여 빈을 수동으로 등록한다.

 


👀 참고 자료

https://velog.io/@neity16/Spring-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8-6-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94Component-Scan-DI

 

Spring 핵심 원리 기본편 (6) - 컴포넌트 스캔(Component Scan) / @Autowired

지금까지 스프링 빈(Bean)을 등록할 때 구성파일에 @Bean 을 사용했다   \--> 관리할 빈이 많아지면 관리하기 번거로워 진다굳이 빈 설정파일을 만들지 않거나, @Bean을 안쓰고 빈 등록을 할 수 있다

velog.io

 

728x90

'[ Spring ] > Spring 입문' 카테고리의 다른 글

[Spring 입문] 회원 관리 예제  (0) 2022.02.14
[Spring 입문] 스프링 웹 개발 기초 (정적 컨텐츠, MVC와 템플릿 엔진, API)  (0) 2022.02.13
[Spring 입문] Welcom page 만들기  (0) 2022.02.12
[Spring] 스프링 부트 프로젝트 생성  (0) 2022.02.12
    '[ Spring ]/Spring 입문' 카테고리의 다른 글
    • [Spring 입문] 회원 관리 예제
    • [Spring 입문] 스프링 웹 개발 기초 (정적 컨텐츠, MVC와 템플릿 엔진, API)
    • [Spring 입문] Welcom page 만들기
    • [Spring] 스프링 부트 프로젝트 생성
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바