인프런 커뮤니티 질문&답변

강택연님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

중복 등록과 충돌

AppConfig가 왜 실행되는지 궁금합니다.

해결된 질문

작성

·

356

3

안녕하세요 선생님 AppConfig.class관련하여 질문드리려고 합니다.

해당 영상에서 7:12부분에 

  • call AppConfig.memberRepository
  • call AppConfig.memberService
  • callAppConfig.orderService

이 세라인이 호출되는 것을 볼 수 있습니다.

허나, 7:12까지의 상황은

AutoAppConfig.class에서 다른 클래스의 @Configuration이 선언된 모든 @Bean객체를 만들지 않는 것으로 알고 있습니다.

@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter (type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {

}

따라서,  AppConfig.class도 @Configuration이 정의 되어 있으므로 Bean객체를 만들지 않는 것으로 이해했습니다.

그런데 보시는 바와 같이 

  • call AppConfig.memberRepository
  • call AppConfig.memberService
  • callAppConfig.orderService

이 세라인이 호출되는데...

왜 호출되는건지... 궁금합니다...

답변주시면 정말 감사드리겠습니다.

추가로, 선생님 강의 정말 감사드립니다.

요즘 정말 개발에 흥미를 느끼고 하루하루 알아가는 즐거움에 살고 있습니다.

선생님 덕에 개발에 흥미를 붙일 수 있어서, 정말 감사한 마음 뿐입니다.

이렇게 좋은 강의를 널리 알려주셔서 정말 감사드립니다.

앞으로도 좋은 강의 많이 부탁드리겠습니다.

감사합니다.

답변 3

1

김영한님의 프로필 이미지
김영한
지식공유자

택연님 잘 이해하고 정리하셨습니다^^

강택연님의 프로필 이미지
강택연
질문자

감사합니다!!

0

음... 이해가 잘 안 되는데요,

1. AutoAppConfig와 AppConfig는 같은 레벨의 디렉토리에 있고,
2. AutoAppConfig의 ComponentScan에 의해 hello.core의 모든 하위 소스들이 스캔 대상이 될 것이고,
3. 그 범위에는 AppConfig도 포함이 되고,
4. 그렇다면 결국 AppConfig는 AutoAppConfig의 ComponentScan에 있는 filter의 영향을 받아야 하는 것이 맞지 않나..?

하는 생각이 듭니다.

혹시 이 부분에서 제 오류를 잡아주실 분 계실까요??

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 현강님

https://www.inflearn.com/questions/374104 답변 드렸습니다.

감사합니다 영한강사님! 즐거운 크리스마스 보내세요!!

헷갈려하시는 부분이 자동 vs 수동 부분에서 AutoAppConfig(자동)의 Filter 때문에 애초에 AppConfig(수동)의 수동 설정이 영향을 받지 않아야 하는데 결과 콘솔에는 오버라이딩 되었다고 출력되는 부분인것 같습니다. 혹시 이 부분이 맞다면 AutoAppConfig가 @ComponentScan으로 자동 스캔도 하지만 강의 내용 2:44 에 보시면 같은 AutoAppConfig에 수동으로 빈을 또 등록해줍니다. 그래서 자동 vs 수동을 비교하여 볼 수 있었던 것 같습니다.

0

강택연님의 프로필 이미지
강택연
질문자

제가 곰곰이 생각해보니...

@SpringBootApplication 설정에서 filter를 설정하지 않았기 때문에

AppConfig.class가 실행되는것이 맞는것 같습니다.

그렇다면 @SpringBootApplication 설정에서 실행한다면,

AppConfig.class에서 수동으로 선언된 @Bean들이 Bean객체로 만들어짐. --> 수동

@Component로 선언되어진 클래스가 Bean객체로 만들어 짐. --> 자동

정리하자면

1. 수동으로 Bean객체생성

2. 자동으로 Bean객체 생성

그렇다면 수동 Bean객체가 우선순위를 가지므로 현재 Spring Container가 가지고 있는 Bean객체들은 1번의 객체들이 들어가게 된다고 이해하는게 맞나요?

질문하면서 정리가 된 느낌이라... 제가 제대로 이해한건지 궁금하여 문의 드립니다.

감사합니다.