직접 스프링 Bean을 등록하기

Jeong Gyejin·2023년 3월 29일
0

스프링 프레임워크

목록 보기
13/17

Component Scan의 원리

Spring에서 앱을 실행시키게 되면 Component Scan을 통해 @Controller, @Service, @Repository등을 찾아서 자동으로 의존관계에 대해서 설정을 해주게 됩니다.(@Controller, @Service, @Repository 안에 @Component를 포함하고 있습니다.) 또한 생성자에 @Autowired가 있으면 객체를 생성하는 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서 등록을 해주게 됩니다.

참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록해주어야 합니다. 따라서 같은 스프링 빈이면 모두 같은 인스턴스입니다. 물론, 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용을 합니다.

그렇다면 직접 자바 코드로 스프링 Bean을 등록하는 방법에 대해서 배워보도록 하겠습니다.

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

실습을 위해서 Service와 Repository에 있는 @Service, @Repository, @Autowired 어노테이션을 제거하고 직접 등록을 해보겠습니다.

SpringConfig 클래스를 만들어서 @Configuration을 등록해주고 @Service와 @Repository 대신에 @Bean을 이용해서 등록해주면 됩니다.

@Configuration
public class SpringConfig {

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

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}
  • @Autowired를 통한 DI에는 필드 주입, setter 주입, 생성자 주입 3가지의 방법이 있는데, 필드 주입을 이용할 경우 변경에 제약이 생기게 됩니다. 그렇기 때문에 생성자를 이용해서 주입을 하게 되는 것을 많이 권장합니다. 생성하는 시점에만 조립해놓고 그 이후에는 변경을 하지 못하도록 제약을 걸 수 있기 때문입니다.

  • 실무에서는 주로 정형화된 controller, service, repository의 경우 컴포넌트 스캔을 사용하지만, 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 할 경우에는 설정을 통해 스프링 Bean으로 등록을 해서 사용합니다.

profile
항상 더 나은 개발자가 되기 위해서 끊임없이 공부하고 학습하면서 성장하는 사람이 되겠습니다.

0개의 댓글