• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@SpringBootApplication에 @ComponentScan 붙으면 어떻게 되나요?

19.07.03 16:27 작성 조회수 164

1

@SpringBootApplication은 소스를 열어보면  아래처럼@ComponentScan이 같이 걸려 있는데요. 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

sj.study.spring.StudyApplication에서 sj.study.other.MyService라는 bean으로 등록하기 위해서 아래처럼 CompoentScan을 사용한다면 기존에 @SpringBootApplication에 포함된 필터나 조건들은 어떻게 되는지 궁금합니다. 아래처럼 하면 동작은 하지만 규칙은 알 수 없어서 질문합니다.

공존하는 것인지 ?

아니면 덮어쓰는지?

경우에 따라 다르다면 어떤 조건이 있는지 궁금합니다. 

이런 정보를 알려면 어떤 문서를 참조해야 하는지도 궁금합니다. 

 

감사합니다.

 

package sj.study.spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

import sj.study.other.MyService;

@SpringBootApplication
@ComponentScan(basePackages={"sj.study"})
public class StudyApplication {
	
	@Autowired
	MyService myService;
	
	@Autowired
	BookService bookService;

	public static void main(String[] args) {
		SpringApplication.run(StudyApplication.class, args);
	}

}

답변 1

답변을 작성해보세요.

0

기존 설정을 엎어쓰게 되서 @SpringBootApplication 안에 있는 @ComponentnScan은 무시하고 @ComponentScan(basePackages={"sj.study"}) 이 설정이 적용됩니다.

이런건 간단히 코드 작성해서 테스트 해보는게 문서를 찾아보는거 보다 더 빠르고 정확하더라구요.