1. 컴포넌트스캔과 의존관계 자동 주입
- 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트스캔 기능을 제공한다.
- @ComponentScan 은 @Component가 붙은 애들을 자동으로 빈에 등록한다.
- @Component 애너테이션을 이제 붙여주면 스프링 빈에 자동으로 등록된다.
- 그럼 DI는 어떻게하나 ? 원래는 AppConfig에서 하나씩 의존관계를 주입해주었지만, 이제는
- 생성자 위에 @Autowired 기능을 이용하면 클래스의 인터페이스에 맞는 의존성을 알아서 주입해준다. (여러 의존관계도 한번에 된당)
- 알아서 등록하는 스프링 빈의 기본 이름은 클래스명을 사용하면서, 카멜케이스로 변경 (직접 지정도 가능)
- 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.
2. Component 스캔의 탐색 위치와 대상
- @ComponentScan(여기에) basePackages를 정할 수 있다. (스캔의 대상)
- 스캔대상을 지정하지 않으면 @ComponentScan을 붙인 패키지의 프로젝트를 다 뒤짐
- 그냥 최상단에다가 두셈. 스프링부트도 이렇게 해줌 (부트 쓰면 어차피 쓸일이 없겠다)
3. @ComponentScan 의 Filter
- 커스텀 애너테이션을 붙여서 컴포넌트스캔의 대상의 필터를 만들 수 있다.
- 5가지 옵션이 있다.
- excludeFilters 를 간혹 사용할 때가 있다.
4. 중복 빈 등록의 충돌
- 빈 이름이 중복된다면 ?
- 자동 빈 등록 vs 자동 빈 등록 : ConfilctingBeanDefinitionException 예외 발생
- 수동 빈 등록 vs 자동 빈 등록 : 수동 빈이 자동 빈을 Overriding 한다. (log까지 친절하게 해준다.)
- 현실은 여러 설정들이 꼬여서 이런 결과가 만들어지는 경우가 대부분임.
- 잡기 어려운 버그가 만들어진다.
- 그래서 스프링 부트에서는 충돌나면 오류 발생하도록 되어있음.
- application.properties 에서 Overriding 할 수 있도록 설정을 변경할 수 있다.
- 항상 코드를 조금 더 쓰더라도 애매한 추상화보다는 명확한 코드가 좋다는 것을 명심하자.
'Backend - Java Spring > Spring Core 핵심원리(완)' 카테고리의 다른 글
[SpringCore 핵심원리] 생성자주입과 롬복 (0) | 2024.02.17 |
---|---|
[SpringCore 핵심원리] 다양한 DI 방법 (0) | 2024.02.17 |
[SpringCore 핵심원리] @Configuration (0) | 2024.02.17 |
[SpringCore 핵심원리] 빈 설정과 싱글톤 (0) | 2024.02.17 |
[SpringCore 핵심원리] IoC, DI, Container (0) | 2024.02.17 |
댓글