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개의 댓글

관련 채용 정보