스프링 빈 등록

ParkIsComing·2022년 6월 25일

Spring

목록 보기
1/21

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

@Controller 
public class MemberController {
//    private final MemberService memberService = new MemberService();
    //다른 controller들도 MemberService 가져다 쓸 수 있으니 new는..좀..
    //그냥 하나만 생성하고 공유해서 쓰는게 나음
    //sol.: spring container에 등록해서 쓰자!(이러면 딱 하나만 등록됨)

    private final MemberService memberService;
    
    @Autowired
    public MemberController(MemberService memberService) {//생성자자
       this.memberService = memberService;
    }
}
  • @Controller가 있으면 spring이 처음에 뜰때 생기는 spring container에 MemberController객체를 생성해서 넣어두고 spring이 관리.
  • 이때 MemberController의 생성자도 같이 호출됨
  • 여기서 생성자에 @Autowired 해놓으면 아래의 memberService에 spring container의 memberService를 가져다 연결해줌
    -> Dependency Injection
  • 참고) setter 방식으로도 가능하긴한데 안 씀

2.직접 스프링빈에 등록

사전작업: 위에서 추가한 @Service랑 @Repository 삭제
(@Controller는 삭제x. Controller는 어차피 spring이 관리하기 때문)

@Configuration
public class SpringConfig {

    @Bean//spring bean에 등록하기 위해 쓰임
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();//인터페이스는 new 안되니까 구현체로 new!
    }

}

0개의 댓글