[Spring] 스프링 빈 등록하기

SCY·2023년 2월 1일
0

스프링 빈을 등록하는 두가지 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기
출처 : 인프런 김영한님 스프링 무료 강의

스프링이 실행되면 스프링 컨테이너스프링 빈이 등록된다.
그림의 초록 박스가 스프링 빈, 화살표가 의존 관계라 생각하면 된다.

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

DI (dependency injection)

  • 객체 의존관계를 외부에서 넣어주는 일
  • new로 선언하는 수고를 덜어낼 수 있음

@Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다.
@Controller, @Service, @Repository@Component를 포함하므로 자동 등록된다.

생성자에 @Autowired를 주입하면 의존 관계가 설정된다.


@Controller
public class MemberController {

    private final MemberService memberService;

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

위 그림의 memberController 스프링 빈 생성, memberService와의 관계 형성.

@Service 
public class MemberService {

    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
}

위 그림의 memberService 스프링 빈 생성, memberRepository와의 관계 형성.

@Repository
public class MemoryMemberRepository implements MemberRepository{}

위 그림의 memberRepository 스프링 빈 생성


정리

  • @Controller, @Service, @Repository 어노테이션
    : 스프링 빈 등록 ( 초록 박스 )

  • @Autowired
    : 의존 관계 설정 ( 화살표 )


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

어노테이션이 아닌, 코드로 직접 스프링 빈을 구현할 수 있다.
별도의 추가 패키지 없이 새 클래스를 만들어 구현했다.

@Configuration
public class SpringConfig {

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

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

memberServicememberRepository를 스프링 빈으로 등록하고, memberService에서 memberRepository를 부름으로써 둘을 연결했다고 볼 수 있다.

Controller는 스프링 실행 시 스프링 빈으로 자동 등록되니 코드로 구현하지 않고, @Component로 냅두며 @AutowiredmemberService와 연결해준다.

🌱 두 방법의 쓰임

주로 정형화된 컨트롤러, 서비스, 리포지토리 코드는 컴포넌트 스캔을 사용한다.
정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 코드를 작성한다.

profile
성장 중독 | 서버, 데이터, 정보 보안을 공부합니다.

0개의 댓글