본문 바로가기

Java/JavaSpring

Chap 5. 컴포넌트 스캔

자동 주입(@Autowired)과 함께 사용하는 추가 기능이 컴포넌트 스캔이다. 

컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다.

 

@Component 애노테이션으로 스캔 대상 지정

@Component 애노테이션에게 준 값에 따라 빈 등록시 사용할 이름이 결정된다.

ex) @Component("infoPrinter") // infoPrinter가 Bean 이름이 된다.

@Component 애노테이션에 값이 설정 되지 않은 경우, 클래스 이름의 첫 글자를 소문자로 바꾼 이름을 빈 이름으로 사용한다.

 

@ComponentScan 애노테이션으로 스캔 설정

@Component 애노테이션을 붙인 클래스를 스캔해서 스프링 빈으로 등록하려면 설정 클래스에 @ComponentScan 애노테이션을 적용해야 한다.

ex) @ComponentScan(basePackages={"spring"})// 배열타입처럼 {"spring","main","config"}같이 여러개 추가 가능, 지정된 패키지만 검색한다.

위 예제와 같이 설정하면 spring 패키지와 그 하위 패키지에 속한 클래스를 스캔대상으로 설정한다.

 

특정 타입이나 그 하위 타입을 컴포넌트 대상에서 제외하려면 ASSIGNABLE_TYPE을 FilterType으로 사용한다.

ex) @ComponentScan(basePackages = {"spring", "spring2" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = ManualBean.class )})

 

수동 등록한 빈과 충돌

@Configuration
@ComponentScan(basePackages = {"spring"})
public class AppCtx {

	@Bean
	public MemberDao memberDao1() {
		MemberDao memberDao = new MemberDao();
        return memberDao;
	}

 

위 예제는 스캔으로 등록한 memberDao 빈과 수동 등록한 memberDao1 빈이 모두 존재한다. 

MemberDao 타입의 빈이 두 개가 생성되므로 자동 주입하는 코드는 @Qualifier 애노테이션을 사용해서 알맞은 빈을 선택한다.

'Java > JavaSpring' 카테고리의 다른 글

Chap 7. AOP 프로그래밍  (0) 2022.06.27
Chap 6. 빈 라이프사이클과 범위  (0) 2022.06.24
Chap 4. 의존 자동 주입  (0) 2022.06.20
Chap 3. 스프링 DI  (0) 2022.06.20
Chap 2. 스프링 시작하기  (0) 2022.06.14