MemberController
package com.danny.learningspring.controller;
import com.danny.learningspring.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
// @Autowired
// public MemberController(MemberService memberService) {
// this.memberService = memberService;
// }
}
- @Controller -- 빌드 될 때 Controller어노테이션을 인식하고 스프링컨테이너에 올려주고 스프링이 관리해줌
- @Autowired -- 빌드 될 때 MemberController와 MemberService의 연결을 도와준다.
- 알아서 의존 객체(Bean) 를 찾아서 주입한다.
- 의존 객체(Bean) 가 2개 이상이면 오류를 발생시킨다.
- 강의와 다르게 @RequiredArgsConstructor를 사용했다. 이유는 다음과 같음
- 스프링에서 Been을 주입받는 방식은 @Autowired, setter, 생성자
- 가장 권장하는 방식은 생성자로 주입을 받는 방식
- @RequiredArgsConstructor는 final이 선언된 초기화되지 않은 모든 필드의 생성자를 생성해줌
- 생성자를 사용한다면 해당 클래스의 의존성 관계가 변경될 때마다 생성자 코드를 계속해서 수정해야하는 번거로움이 있음
Service, Repository
@Service
@RequiredArgsConstructor
public class MemberService
@Repository
public class MemoryMemberRepository implements MemberRepository
- Service클래스와 Repository클래스도 어노테이션을 붙혀줌으로써 빌드가 될 때 컨테이너에 등록될 수 있게 함
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정(@Autowired)
- 자바 코드로 직접 스프링 빈 등록하기
컴포넌트 스캔 원리
- @Controller, @Service, @Repository 인터페이스는 @Component를 포함하고 있음
- 빌드가 될 때 @Component 어노테이션이 있으면 스프링 빈으로 자동 등록 됨
- @Controller, @Service, @Repository 어노테이션들이 자동으로 스프링 빈에 등록된 이유도 컴포넌트 스캔 때문
- @SpringBootApplication가 등록된 클래스의 패키지의 하위 패키지에서만 component scan이 이루어짐
참고
- 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다)
- 같은 스프링 빈이면 모두 같은 인스턴스다.
- 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.
'Spring 입문' 카테고리의 다른 글
스프링MVC 입문15 (0) | 2022.11.11 |
---|---|
스프링MVC 입문14 (0) | 2022.11.11 |
스프링MVC 입문12 (0) | 2022.11.11 |
스프링MVC 입문11 (0) | 2022.11.10 |
스프링MVC 입문10 (0) | 2022.11.10 |
댓글