inflearn logo
강의

Course

Instructor

Spring Core Principles - Basic Edition

Getting Started with Component Scan and Automatic Dependency Injection

질문이 있습니다.

450

kangsy763

49 asked

16

안녕하세요 영한님 이번강의 이해하고 싶은 점이 생겨 질문드립니다.

1. ComponentScan은 Component가 붙은 클래스들을 자동으로 빈 등록을 해준다고 하셨습니다. 그렇다면 AutoAppConfig 에서 @ComponentScan을 통해 @Component 붙은 것들을 빈 등록을 해주게 되는데, 기존의 AppConfig에도 해당 클래스들의 빈등록을 해준 상태입니다.  그렇기 때문에 ComponentScan filter에서 Configuration.class를 배제 시켜줬는데,  AutoappConfig 클래스에도 @Configuration이 마찬가지로 있는데, ComponentScan의 배제 코드는 본인클래스에 잇는 Configuration에는 효력이 발생하지 않는건가요 ??


2. MemberServiceImpl 에다가 @Component를 선언해주었는데, 그러면 이 때에 해당 클래스의 타입인 MemberService 또한 같이 빈등록이 되는건가요 ?? 만약 그게 아니라면 이 타입을 등록해주고 싶을 때에는 interface에 @Component를 해야되나요? 아니면 수동 등록을 해주어야 하는건가요?

3. 의존성을 위해 @Autowired를 등록해주었는데, 만약 해당 객체가 빈등록이 되어있지 않다면 오류가 나게 되나요? 아니면 자동으로 등록을 해주고 갖고오게되나요?? 

oop spring

Answer 3

20

yh

안녕하세요. kangsy763님^^

1. AutoappConfig 클래스에도 @Configuration이 마찬가지로 있는데, ComponentScan의 배제 코드는 본인클래스에 잇는 Configuration에는 효력이 발생하지 않는건가요 ??

-> 그렇지는 않습니다^^ AutoAppConfig도 스프링 빈으로 등록이 됩니다. 그런데! AutoAppConfig가 스프링 빈으로 등록되는 이유는 사실 따로 있습니다. 잘 생각해보면 @ComponentScan 기능이 활성화 되려면, 그보다 먼저 AutoAppConfig가 스프링 빈으로 등록이 되어야 합니다. @ComponentScan도 스프링이 제공하는 기능이기 때문에 AutoAppConfig 클래스가 스프링 빈으로 등록되어야 동작하는 것이지요. 그러면 AutoAppConfig는 언제 스프링 빈으로 등록되는가? 바로 다음 코드 입니다.

스프링 컨테이너를 생성할 때 넘겨준 클래스 정보는 스프링 빈으로 등록되어 버립니다^^

new AnnotationConfigApplicationContext(AutoAppConfig.class);

2. MemberServiceImpl 에다가 @Component를 선언해주었는데, 그러면 이 때에 해당 클래스의 타입인 MemberService 또한 같이 빈등록이 되는건가요 ?? 만약 그게 아니라면 이 타입을 등록해주고 싶을 때에는 interface에 @Component를 해야되나요? 아니면 수동 등록을 해주어야 하는건가요?

-> 스프링은 하위 타입으로 등록해도 조회 시점에 상위 타입으로 모두 조회할 수 있습니다^^ 따라서 해당 부분은 전혀 걱정하지 않으셔도 됩니다.

3. 의존성을 위해 @Autowired를 등록해주었는데, 만약 해당 객체가 빈등록이 되어있지 않다면 오류가 나게 되나요? 아니면 자동으로 등록을 해주고 갖고오게되나요?? 

-> 오류가 발생합니다. 섹션 7. 의존관계 자동 주입에서 자세히 설명드립니다^^

감사합니다.

2

kangsy763

오우 진짜 이것들 때문에 엄청 답답했었는데 아주 통쾌하게 해결됐습니다. 감사합니다~ ^^

0

akakakakak

같은 궁금증이 생겼는데 역시 이미 올라온 질문이었군요. 감사합니다.

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

44

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

72

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

87

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

79

1

테스트 속도가 나중에 영향이 있을까요?

0

75

1

gradle 설정 안떠서 질문 남깁니다!

0

116

2

build.gradle로 프로젝트를 여는 이유

0

81

1

provider 사용하는 이유

0

82

1

다음 강의 뭘 들어야 할까요

0

123

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

62

1

beanB

0

79

2

퀴즈다시풀기

0

63

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

90

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

63

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

102

2

도메인의 정의?

0

57

1

ApplicationContext 질문입니다.

0

60

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

86

2

ai api 선정하기 관련 질문

0

115

2

생성자 자동주입 관련해서

0

60

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

91

2

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

62

1

12:25

0

74

2

appConfig.xml 오류

0

123

1