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 애노테이션으로 선언된 메서드들은 스프링 빈으로 등록되며, 스프링 컨테이너는 이 객체들을 관리하게 됩니다.
따라서 MemberService와 MemberRepository는 각각 필요할 때 스프링 컨테이너로부터 주입받아 사용할 수 있습니다.
이러한 설정 방식은 코드의 결합도를 낮추고 유지 보수를 용이하게 합니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 웹 기능 - 등록, DTO와 DAO (0) | 2024.04.29 |
---|---|
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 웹 기능 - 홈 화면 추가 (0) | 2024.04.29 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2024.04.29 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 서비스 테스트 (1) | 2024.04.26 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 서비스 개발 (0) | 2024.04.24 |