본문 바로가기

SPRING/Spring

[스프링| 스프링 입문 | 코드로 배우는 스프링] 자바 코드로 직접 스프링 빈 등록하기

package hello.hellospring;

// 필요한 클래스를 임포트합니다.
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  // 이 클래스가 스프링 설정 클래스임을 선언합니다. 스프링 IoC 컨테이너는 이 클래스에서 빈 설정 정보를 읽어들입니다.
public class SpringConfig {
    
    @Bean  // 스프링 컨텍스트에 의해 관리될 빈을 선언합니다. 이 메서드가 반환하는 객체는 스프링 컨테이너에 의해 싱글턴으로 관리됩니다.
    public MemberService memberService() {
        return new MemberService(memberRepository());  // MemberService 인스턴스를 생성하고, memberRepository()를 호출하여 의존성을 주입합니다.
    }
    
    @Bean  // 또 다른 빈을 선언합니다. 이 메서드가 반환하는 객체 역시 스프링 컨테이너에 의해 싱글턴으로 관리됩니다.
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();  // MemoryMemberRepository 인스턴스를 생성합니다. 이 클래스는 MemberRepository 인터페이스의 구현체입니다.
    }
}

이 구성은 간단하면서도 효과적인 의존성 주입 예제를 제공합니다.

@Bean 애노테이션으로 선언된 메서드들은 스프링 빈으로 등록되며, 스프링 컨테이너는 이 객체들을 관리하게 됩니다.

 따라서 MemberServiceMemberRepository는 각각 필요할 때 스프링 컨테이너로부터 주입받아 사용할 수 있습니다.

이러한 설정 방식은 코드의 결합도를 낮추고 유지 보수를 용이하게 합니다.