본문 바로가기
Framekwork/SPRING

[자바/스프링] 스프링 빈과 의존관계

by 아이엠제니 2023. 2. 20.

 

 

스프링 빈과 의존관계

회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자.

 

화면을 붙이고 싶은데, 그러려면 controller랑 view template이 필요함. 

회원가입을 하고, 회원 가입된 결과를 HTML로 뿌려준다.

 

memberController가 memberService를 통해 회원가입을 하고, memberService를 통해 데이터를 조회할 수 있어야 한다.

이렇게 되는 걸 의존 관계가 있다고 표현한다.

 

💾 main > controller > MemberController

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    
}

이렇게까지만 만들면 기능은 아무것도 없지만, 스프링 컨테이너가 스프링일 처음 뜰 때 스프링 컨테이너라는 통이 생긴다.

거기에 @Controller (컨트롤 어노테이션)이 있으면 MemberController 객체를 생성해서 스프링에 넣어둔다.

그리고 스프링이 관리를 한다.

 

memberService에 에러가 뜬다.

그 이유는 💾 memberService는 순수 자바 클래스라서, 스프링이 알 방법이 없음.

 

 

💾 MemberService에 @Service 서비스 어노테이션 추가

 

 

💾 MemoryMemberRepository 에 @Repository 리포지토리 어노테이션 추가

 

Controller-Service-Reoisitory 는 굉장히 정형화된 패턴이다.

 

✔️ 스프링 빈 등록 이미지

  • `memberService`와 `memberRepository`가 스프링 컨테이너에 스프링 빈으로 등록되었다.

 

💡 참고

  • 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다. (유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴트다. 설정으로 싱글톤이 아니게 설정할  수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.

 

✔️ 스프링 빈을 등록하는 2가지 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기

 

✔️ 컴포넌트 스캔과 자동 의존관계 설정

  • `@Component` 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
  • `@Controller` 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.

 

  • `@Component`를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
    • `@Controller`
    • `@Service`
    • `@repository`

 

 

 

[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 강의 기록
300x250