🔹 @ComponentScan: 컴포넌트 스캔 어노테이션, 이름 그대로 @Component 어노테이션이 붙은 클래스를 스캔에서 스프링 빈으로 등록한다.
🔹 컴포넌트 스캔을 사용하면 @Configuration이 붙은 설정 정보도 자동으로 등록된다.
🔹 AppCofig, TestConfig 등 앞에서 만들었던 설정 정보가 함께 등록되고 실행되기 때문에 excludeFilters를 사용해서 설정 정보는 컴포넌트 스캔 대상에서 제외했다.
🔸 AutoAppConfig.java
@Configuration
@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig{
}
🔹 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.
🔹 아래의 경우 자동 빈 등록보다 수동 빈 등록이 우선권을 가진다.
🔹 수동 빈이 자동 빈을 오버라이딩 한다.
@Component
public class MemoryMemberRespository implements MemberRespository{}
@Configuration
@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig{
@Bean(name = "memoryMemberRespository")
public MemberRespository memberRepository(){
return new MemoryMemberRepository();
}
}
🔹 수동 빈 등록시 로그:
"Overriding bean definition for bean 'memoryMemberRepository' with a different definition: replacing"
🔹 자동, 수동 빈 등록 오류 발생시 스프링 부트 에러 메세지:
"Consider renaming one of the beans or enabling overriding by setting
spring.main.allow-bean-definition-overriding=true"