spring boot 간단 프로젝트 만들기_4

다돔잉·2021년 3월 7일
0

참고

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 인프런 강의를 정리한 것 --> 스프링부트 강의 바로가기

스프링 빈과 의존관계

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

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

  • 스프링은 올라올 때 디렉토리 아래의 파일을 스캔하여 @Component 어노테이션이 있으면 객체를 하나씩 생성하여 스프링 컨테이너에 등록함
  • @Controller, @Service, @Repository는 @Component이 붙어있기 때문에 스프링빈으로 등록됨(@Component이 붙지 않으면 순수 java class 이기 때문에 스프링 컨테이너가 찾지 못함)
  • 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본으로 싱글톤으로 등록. 즉, 같은 스프링빈이면 모두 같은 인스턴스임(특수한 경우가 아니면 새로 만들지 않음)
  • 다른 객체에서 스프링빈을 재활용하기 위하여 @Autowired 어노에티션 사용
//MemberController.java

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired 
    // 생성자
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }
}
  1. 스프링빈이 올라와서 컨포넌트 스캔할 때 MemberController 생성자를 호출
  2. 객체를 생성하다 @Autowired 발견
  3. (객체생성지점) 스프링 컨테이너에 등록돼있는 MemberService를 가져와 연결을 시켜줌 ==> DI

DI(Dependency Injection) 의존성 주입
; 객체의 의존 관계를 직접 넣어 주는 것.

자바 코드로 직접 스프링 빈 등록하기

  • hello 디렉토리 하단에 SpringConfig.java 파일을 생성
  • @Configration ; 1개 이상 Bean을 등록하고 있음을 명시하는 어노테이션
  • @Bean ; 스프링빈으로 등록하게하는 어노테이션
  • 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
  • 주의: @Autowired 를 통한 DI는 helloConroller , memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
    -> 스프링빈으로 등록되지 않은 파일에서 @Autowired는 작동하지 않음
profile
안녕

0개의 댓글