일단 실행이 되면 스프링 컨테이너는 @SpringBootApplication이 달린 경로부터 시작으로 모든 하위경로를 검색한다.
이떄 @Component 어노테이션을 달고있는 객체들은 모두 자동으로 생성되어 스프링 컨테이너에 보관된다. 이러한 방식을 컴포턴트 스캔이라고 한다.
(기본적으로 싱글톤 방식을 사용해 각 컴포넌트 객체는 하나씩만 존재한다.)
@Controller, @Service, @Repository 모두 내부적으로 @Component를 포함하고 있다.
A 클래스가 B 클래스의 객체를 멤버로 사용할 경우 A가 B에 의존성을 갖고 있다고 표현한다.
이때 A 내부에서 B 객체를 직접 생성하는 방식으로 사용하지 않는다.
@Autowired를 사용해 생성자에서 객체를 전달받는데, 이를 의존성 주입(DI : Dependency Injection) 중에서도 생성자 주입이라고 한다.
주의해야할 점은 의존성이 엮여있는 모든 클래스를 전부 다 처리해줘야 제대로 동작한다는 것이다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
'김영한님 스프링 강의 정리 > 입문편' 카테고리의 다른 글
15, 16, 17, 18, 19 생략 (0) | 2020.12.28 |
---|---|
14. 자바 코드로 직접 빈 등록 (0) | 2020.12.27 |
11, 12. Service 개발 및 Test (단축키, Test 관련 팁) (0) | 2020.12.27 |
08, 09, 10. 도메인과 레포지터리, 테스트 케이스 작성(JUnit) (0) | 2020.12.26 |
07. API 방식 처리 (@ResponseBody) (0) | 2020.12.26 |