컴포넌트 스캔과 자동 의존관계 설정
회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자
1
2
3
4
5
6
7
8
9
10
|
@Controller
public class Membercontroller {
private final MemberService memberService;
@Autowired
//Di = 디펜더시 인젝션
public Membercontroller(MemberService memberService){
this.memberService = memberService;
}
}
|
cs |
생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.
이전 테스트에서는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다.
> 참고: helloController는 스프링이 제공하는 컨트롤러여서 스프링 빈으로 자동 등록된다
@Controller 가 있으면 자동 등록됨
스프링 빈을 등록하는 2가지 방법
1) 컴포넌트 스캔과 자동 의존관계 설정
2) 자바 코드로 직접 스프링 빈 등록하기
1)컴포넌트 스캔 원리
@Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
@Component 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
@Controller
@Service
@Repository
> 참고: 생성자에 @Autowired 를 사용하면 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서
주입한다. 생성자가 1개만 있으면 @Autowired 는 생략할 수 있다.
memberService 와 memberRepository 가 스프링 컨테이너에 스프링 빈으로 등록되었다.
참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다
싱글톤(Singleton) 패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다
장점 - 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다
컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)
**하위패키지가 동일하거나, 하위 패키지가 아닌 애들은 springBin 으로 컴포넌트 스캔을 안한다.
(어떠한 설정을 해주면 가능, 그러나 기본적으로는 컴포넌트 스캔의 대상이 아님)
'프로그래밍 > SpringMVC_기초' 카테고리의 다른 글
회원관리 예제 - 7 (홈화면 추가하기) (1) | 2023.10.22 |
---|---|
회원관리 예제-6(자바 코드로 직접 스프링 빈 등록하기) (필드 주입, setter 주입, 생성자 주입) (0) | 2023.10.22 |
회원관리예제-4 (MemberService) (di,After&BeforeEach ) (0) | 2023.10.18 |
회원관리 예제-3 (Test Case) (assertThat) (0) | 2023.10.14 |
회원관리 예제-2 (Optional) (0) | 2023.10.14 |