14 자바 코드로 스프링 빈 등록

이연희·2022년 1월 23일
0

Spring

목록 보기
14/105

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

  • @Configuration, @Bean으로 memberService와 memberRepository를 등록
  • 스프링 빈에 등록되어 있는 memberRepository를 MemberService에 넣어준다.
@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());//스프링 빈에 등록되어 있는 memberRepository를 MemberService에 넣어준다. 
    }

    @Bean
    public MemberRepository memberRepository() {//인터페이스는 new 안됨
        return new MemoryMemberRepository();
    }
}

-컨트롤러는 컴포넌트 스캔으로 스프링 빈에 올라감

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired//스프링이 스프링 컨테이너에 있는 memberService와 연결시켜 주는 역할
    public MemberController(MemberService memberService){//생성자로 한번 등록함
        this.memberService=memberService;
    }
}

스프링 빈 조립 방식: 생성자 주입, 필드 주입, setter 주입이 있다. 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.

생성자 주입

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired//스프링이 스프링 컨테이너에 있는 memberService와 연결시켜 주는 역할
    public MemberController(MemberService memberService){//생성자로 한번 등록함
        this.memberService=memberService;
    }
}

필드 주입: 중간에 바꿀 수 있는 방법이 없음

@Controller
public class MemberController {
    @Autowired private MemberService memberService;
}

setter 주입: 누군가 멤버 컨트롤러 접근했을 때 public으로 열려있어야 함

@Controller
public class MemberController {
    private final MemberService memberService;

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

💡 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 정형화되지 않거나 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.


스프링입문14(김영한)

profile
공부기록

0개의 댓글