✔ Inflearn 강의 수강 내용 정리글입니다!
@Configuration
@ComponentScan
public class AutoAppConfig {
}
@Component
public class MemoryMemberRepository implements MemberRepository {}
@Component
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
@ComponentScan("new name")
@ComponentScan(
basePackages = "hello.core",
}
basePackages : 탐색을 시작할 패키지의 위치
basePackages = {"hello.core", "hello.service"} : 탐색 위치를 여러개 지정할 수도 있다.
패키지 위치를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것을 권장한다!
📍 스프링 부트의 대표 시작 정보인 @SpringBootApplication를 프로젝트 시작 위치에 두는 것이 관례 ➡ 이 설정 안에 @ComponentScan이 들어있다.
💡 includeFilters : 컴포넌트 스캔 대상을 추가로 지정
💡 excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정
@MyIncludeComponent
public class BeanA {
}
@MyExcludeComponent
public class BeanB {
}
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
ConflictingBeanDefinitionException
예외 발생수동 빈이 자동 빈을 오버라이딩
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
[출처 - Inflearn : 스프링 핵심 원리 - 기본편]
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/dashboard