스프링 입문 - 스프링 빈과 의존관계

young·2023년 5월 1일
0

Spring Boot

목록 보기
4/19
post-thumbnail

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

컨트롤러가 멤버 서비스를 통해서 회원 가입을 하고, 멤버 서비스를 통해서 데이터를 조회할 수 있게 해야한다.

controller - service - repository 정형화되어있는 패턴
controller에서 외부 요청을 받고, 서비스에서 비즈니스로직을 만들고, 레포지토리에서 데이터를 저장하는 정형화되어있는 패턴

@Service
public class MemberService { } 

@Repository
public class MemoryMemberRepository implements MemberRepository{

package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService(); 
    // 하나만 생성해서 공용으로 사용하기 위해 + spring container 등록을 위해서
    
    private final MemberService memberService;

    @Autowired // 멤버 서비스 - 멤버 컨트롤러와 연결해주는 어노테이션
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }

}


왜냐하면 멤버 컨트롤러가 멤버 서비스를 통해 회원가입하고, @Autowired를 통해서 데이터 조회한다. 그렇기 때문에 스프링 컨테이너에 있는 MemberService를 가져와야 하는데, 스프링 컨테이너에는 MemberService가 없기 때문에
그래서 의존관계가 정상적으로 작동하기 위해서 MemberService 도 스프링 빈에 등록를 해줘야 한다.

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

📍 JavaConfig 추가

// 생성자 주입 의미
public MemberService(MemberRepository memberRepository){
        this.memberRepository =memberRepository;
    } 

-- 필드 주입 --

@Autowired private MemberService memberService;

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

📍SpringConfig 클래스 파일 생성

@Configuration
public class SpringConfig {

    // Spring bean에 MemberService 등록
    @Bean
    public MemberService MemberService() {
        // Spring bean에 등록되어 있는 MemberRepository를 MemberService에 넣어줌
        return new MemberService(memberRepository());
    }

    // Spring bean에 MemberRepository 등록
    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

=> 스프링 컨테이너에 스프링 빈으로 등록이 되고, 서로 의존 관계를 가지게 된다.

profile
ฅʕ•̫͡•ʔฅ

0개의 댓글