2022. 7. 30. 15:36ㆍ2022/Spring
화면에 붙이기 위해서는 Controller와 View Templates가 필요하다.
그러기 위해 MemberController가 필요한데, 이는 MemberService를 통해 회원가입하고, 데이터를 조회할 수 있어야한다.
이를 MemberController가 MemberService에 의존한다고 한다.
MemberService는 스프링 컨테이너에 딱 한번 등록하고 공용으로 사용하는 것이 좋다.
new로 생성하는 경우, 다양한 Controller에서도 호출이 가능해진다.
private final MemberService memberService;
MemberController를 생성하면 그 아래 생성자를 자동으로 호출하게 되는데, @Autowired가 있으면 컨테이너에 등록된 스프링 빈 memberService 객체를 넣어주어 MemberService.java에 연결시켜준다.
= Dependency Injection(DI)
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
그런데 이미지와 같이 memberService를 보면 빨간불로 경고가 뜬다.
MemberController의 스프링이 가지고 있는 어노테이션(@) 아래의 memberService가 연결할 MemberService가 없다는 뜻이다. 이는 MemberService.java는 순수 자바 소스로 스프링이 이를 알 수 있는 방법이 없기 때문이다.
즉, @Service라는 어노테이션으로 스프링이 식별가능하도록 해주어야만 한다.
repository도 마찬가지로 @Repository를 추가해주어서 스프링이 식별 가능하도록 해주어야만 한다.
Controller를 통해 외부 요청을 받고,
Service를 통해 비즈니스 로직을 타고,
Repostiroy를 통해 데이터를 저장하는
정형화된 패턴
* 참고 *
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본적으로 싱글톤(하나만 등록해서 공유)으로 등록한다.
즉, 같은 스프링 빈이면 모두 같은 인스턴스이다.
Ex ) orderService가 하나 추가가 되어 @Autowired로 memoryMemberRepository에 memberRepository 요청하면 memberService와 동일한 인스턴스를 제공한다.
- 정리 -
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 컴포넌트 스캔 : @Component가 있으면 스프링 빈으로 자동 등록
- @Controller, @Service, @Repository가 스프링 빈으로 자동등록 된 이유도 컴포넌트 스캔 때문이다. : 각각@Component를 포함
- 스프링이 올라올 때 Component 관련 어노테이션이 있으면, 각자 객체를 하나씩 만들어서 컨테이너에 등록하게 된다.
- 자동 의존관계 설정 : @Autowired
- 생성자에 @Autowired를 사용하면 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서 주입한다. 이때 생성자가 1개인 경우에는 @Autowored를 생략할 수 있다.
- 컴포넌트 스캔 : @Component가 있으면 스프링 빈으로 자동 등록
- 자바 코드로 직접 스프링 빈 등록
스프링이 식별 가능한 범위
hello.hellospring 패키지 아래에 @SpringBootApplication이 실행되는 클래스 하위 패키지들은 모두 스프링 빈으로 등록 가능한 범위에 속한다.
'2022 > Spring' 카테고리의 다른 글
회원 관리 예제 - 웹 MVC 개발 & 등록 & 조회 (0) | 2022.07.30 |
---|---|
스프링 빈과 의존관계 - 자바 코드로 직접 스프링 빈 등록하기 (0) | 2022.07.30 |
회원 관리 예제 - 회원 서비스 테스트 (0) | 2022.07.30 |
회원 관리 예제 - 회원 서비스 개발 (0) | 2022.07.30 |
회원 관리 예제 - 회원 리포지토리 테스트케이스 작성 (0) | 2022.07.27 |