Spring/[인프런 김영한 스프링 핵심 원리 -기본편]

[인프런 김영한 스프링 핵심 원리 - 기본편] 컴포넌트 스캔

h2boom 2024. 8. 14. 00:41

컴포넌트 스캔

@Configuration
@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, 
			classes = Configuration.class)
)
public class AutoAppConfig {

}
  • 스프링 설정 파일에 @ComponentScan 선언 시 @Component로 선언된 클래스를 찾아서 자동으로 스프링 빈으로 등록한다.
    • 스프링 설정 파일에 @Bean으로 따로 등록하지 않아도 스프링 빈으로 등록해준다.
    • excludeFilters 옵션으로 컴포넌트 스캔 제외 대상을 지정할 수 있다.
    • excludeFilters 옵션으로 컴포넌트 스캔 대상을 지정할 수 있다.
  • 컴포넌트 스캔 : @Component 어노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다.

 

public class MemberService implements Service {
	private Repository repository;

	@Autowired
	public MemberService(Repository repository) {
		this.repository = repository
	}
...
}
  • 자동 의존관계 주입하는 방법으로 생성자에 @Autowired를 붙여주는 것이다.
  • @Autowired : 의존관계를 자동으로 주입시켜주는 어노테이션이다.

 

  • 컴포넌트 스캔과 자동 의존관계 주입 동작 원리
    1. 컴포넌트 스캔 @ComponentScan
      • @ComponentScan이 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
      • 스프링 빈의 이름은 클래스명을 사용하되 맨 앞글자만 소문자로 사용한다.
    2. 의존관계 자동 주입 @Autowired
      • 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.
      • 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.
        getBean(클래스.class)와 동일하다.

 

 

  • @ComponentScan(basePackage = .... ) - basePackage 옵션으로 컴포넌트 스캔 범위를 지정할 수 있다.
    • 해당 패키지를 포함한 하위 패키지를 모두 탐색한다.
    • 중괄호로 묶어서 여러 패키지를 지정할 수 있다.
    • 설정 정보 클래스의 패키지를 기준으로 해당 패키지를 포함한 하위 패키지에서 찾는다.
    • 권장하는 방법으로는 패키지 위치를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 위치시키는 것

 

  • 컴포넌트 스캔 기본 대상
  • @Component를 제외한 기본 대상에는 내부에 @Component가 붙어있으며 부가 기능을 수행한다.
    • @Component : 컴포넌트 스캔에서 사용
    • @Controller : 스프링 MVC 컨트롤러에서 사용
      • 스프링 MVC 컨트롤러로 인식한다.
    • @Service : 스프링 비지니스 로직에서 사용
      • 특별한 처리를 하지는 않지만 다른 개발자들이 비지니스 계층을 인식하는데 도움을 준다.
    • @Repository : 스프링 데이터 접근 계층에서 사용
      • 스프링 데이터 접근 계층으로 인식하고 테이터 계층의 예외를 스프링 예외로 변환해준다.
    • @Configuration : 스프링 설정 정보에서 사용
      • 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
  • 어노테이션에는 상속관계가 없기에 특정 어노테이션을 인식할 수 있게 하는 것은 스프링이 지원하는 기능이다.

 

  • 컴포넌트 스캔 시 같은 이름인 경우?
    • 자동 빈 등록 vs 자동 빈 등록의 경우
      • 예외가 발생한다.
    • 수동 빈 등록 vs 자동 빈 등록의 경우
      • 수동 빈 등록이 우선권을 갖는다. (수동 빈이 자동 빈을 오버라이딩한다.)
      • 의도치 않게 이런 경우가 발생하는 경우가 많기 때문에 최근부터는 스프링 부트에서 오류를 발생 시킨다.

 

출처 : [인프런 김영한 스프링 핵심 원리 - 기본편]

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com