본문 바로가기
SpringFramework/SpringBoot 기초

[SpringBoot] 스프링 빈과 의존관계 - 자동의존관계(컴포넌트 스캔), 자바코드로 직접 등록하기

by 쭈봉이 2021. 12. 7.

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

  • 어노테이션을 보고 스프링 컨테이너에 등록 및 연결 (@AutoWired)
  • @Component 애노테이션이 있으면 스프링 빈으로 자동등록
    (@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.)
  • @Component를 포함하는 애노테이션 :  @Controller, @Service, @Repository
  • 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록 (유일하게 하나만 등록하여 공유)
    따라서 같은 스프링 빈이면 모두 같은 인스턴스

@Controller 어노테이션이 있을 경우 스프링이 따로 관리를 한다.

여러 곳에서 쓰이는 객체는 생성 후 스프링 컨테이너에 보관해서 같이 쓴다. 매번 new를 쓰지 않아도 되는 장점!

@Autowired : Controller와 Service 연결 MemberController가 생성 될 때 Spring Bean의 Member Service를 주입해줌 (DI)

@Controller // 객체 생성 후 스프링 컨테이너에 담아두고 관리
public class MemberController {
    private final MemberService memberService;

    @Autowired // Controller와 Service 연결 MemberController가 생성 될 때 Spring Bean의 Member Service를 주입해줌 (DI)
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
@Service
public class MemberService {

    private final MemberRepository memberRepository;

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

 

 

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

@Controller는 컴포턴트 스캔을 해야함

Service와 Repository는 @Bean을 사용해서 상호 등록을 해준다.

@Configuration
public class SpringConfig {

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

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

 

댓글