@SpringBootTest에서 어떻게 @Autowired가 작동하는지 궁금합니다
안녕하세요~ 유익한 강의 잘 듣고 있습니다!
이해가 안가는 부분이 있어 질문드립니다.
24분 40초 쯤에 보면 @SpringBootTest 클래스에서 @Autowired를 사용하고 있습니다. 이게 어떻게 동작하는지 모르겠습니다.
1. 일전에, ComponetScan의 범위는 AutoAppConfig가 포함된 패키지 이하라고 하셨습니다.
이에 따르면 test, resources는 컴포넌트 스캔의 대상이 아닙니다
2. 의존관계 주입 대상은 컨테이너에 빈이라고 하셨습니다.
그렇다면 @SpringBootTest 클래스(CoreApplicationTest)는 빈 등록 대상이 아니므로 Autowired가 불가능한 것 아닌가요??
어떤 과정을 거쳐 @SpringBootTest 클래스에 빈이 주입되는지 궁금합니다!
답변 1
12
안녕하세요. 재량님
지금까지는 우리가 직접 스프링 컨테이너인 ApplicationContext를 생성했습니다.
반면에 @SpringBootTest는 스프링 부트가 제공하는 스프링 컨테이너를 사용해서 실행하는 방법입니다.
@SpringBootTest를 사용하면 @SpringBootApplication이 있는 CoreApplication을 찾아서 사용합니다.
그리고 이렇게 찾은 @SpringBootApplication 안에는 @ComponentScan이 존재합니다.
이곳의 package 위치는 hello.core이기 때문에 우리가 작성한 전에 애플리케이션 코드가 컴포넌트 스캔의 대상이 됩니다. 여기에는 @Configuration도 포함됩니다.
그리고 테스트에서 실행했기 때문에 test 중에서도 hello.core를 포함한 그 하위 패키지는 컴포넌트 스캔의 대상이 됩니다.
두번째 질문하신 것은 @SpringBootTest가 있으면 해당 테스트 클래스는 특수하게 @Autowired를 허용해줍니다. 이것은 스프링 빈으로 등록되어서 그런 것은 아니고, JUnit과 스프링이 예외적으로 테스트를 편리하게 하도록 허용하는 기능입니다.
도움이 되셨길 바래요^^
섹션3. 11 회원객체 다이어그램
0
25
1
OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.
0
24
1
코드 자료
0
60
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
66
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
84
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
96
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
81
1
테스트 속도가 나중에 영향이 있을까요?
0
81
1
gradle 설정 안떠서 질문 남깁니다!
0
128
2
build.gradle로 프로젝트를 여는 이유
0
91
1
provider 사용하는 이유
0
94
1
다음 강의 뭘 들어야 할까요
0
131
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
66
1
beanB
0
82
2
퀴즈다시풀기
0
70
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
95
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
67
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
107
2
도메인의 정의?
0
60
1
ApplicationContext 질문입니다.
0
65
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
93
2
ai api 선정하기 관련 질문
0
124
2
생성자 자동주입 관련해서
0
68
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
99
2





