@Configuration @ComponentScan( basePackages = "hello.core.member", //멤버 패키지부터 하위패키지끼 스캔 대상 basePackageClasses = AutoAppConfig.class, //AutoAppConfig 이 클래스의 패키지를 탐색 excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes = Configuration.class) ) //@Configuration 어노테이션 붙은 클래스 컴포넌트 스캔 제외 대상 //권장방법 : 프로젝트를 최상단 패키지에 두고 basePackage를 생략 //부트를 사용하면 @SpringBootApplication을 프로젝트 시작 위치에 두는것이 관례 설정안에 @ComponentScan이들어있다. //컴포넌트스캔은 @Component애노테이션이 붙은 클래스르 찾아서 자동으로 스프링 빈으로 등록 public class AutoAppConfig { }
이 경우 수동 빈 등록이 우선권을 가진다. 수동 빈이 자동 빈을 오버라이딩한다.
빈 등록 충돌시 최근에는 스프링부트에서는 수동 빈등록과 자동 빈등록이 충돌이 나면 오류가 발생하도록 기본값을 바꾸었다.
consider renaming one of the beans or enabling overriding by setting spring.main spring.main.allow-bean-definition-overriding=true
스프링 부트에서 오버라이딩이 안되게끔 막아놔서 false로 바꿔 오버라이딩을 할 수 있게 끔 해놓았다
어설픈 추상화나 어설픈 우선순위가 있으면 오류를 잡기 어렵기 떄문에 명확한것이 중요하다.