스프링 빈과 의존관계

 

 

회원관리 예제 - Repository개발 및 테스트 케이스 작성

데이터 : 회원 ID, 이름 기능 : 회원 등록 , 조회 MemberRepository.java (Interface) package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.List; import java.uti..

write-read.tistory.com

 

회원관리 예제 - Service개발 및 테스트 케이스 작성

회원관리 예제 - Repository개발 및 테스트 케이스 작성 데이터 : 회원 ID, 이름 기능 : 회원 등록 , 조회 MemberRepository.java (Interface) package hello.hellospring.repository; import hello.hellospring.d..

write-read.tistory.com

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

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

  • 스프링 빈을 등록하는 2가지 방법
    • 컴포넌트 스캔과 자동 의존관계 설정
    • 자바 코드로 직접 스프링 빈 등록하기
  • 컴포넌트 스캔과 자동 의존관계 설정
    • @Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다.
    • @Controller가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
    • @Component를 포함하는 다음 어노테이션도 스프링 빈으로 자동 등록된다.

@Controller
@Service
@Repository

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

@Controller(그대로 사용)
@Service , @Repository , @Autowired를 대체

SpringConfig

package hello.hellospring;

import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

DI (Dependency Injection)

생성자 주입

  @Autowired
  public MemberController(MemberService memberService) {
      this.memberService = memberService;
  }

필드 주입 

  @Autowired  
  private final MemberService memberService;

Setter 주입

  @Autowired
  public void setMemberService(MemberService memberService) {
      this.memberService = memberService;
  }

의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.

실무에서는 주로 정형화된 컨트롤러 , 서비스 , 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.

그리고 정형화 되지 않거나 , 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

 

(Generate)

Alt + Insert

 

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Java Spring MVC Spring Boot 온라인

www.inflearn.com