스프링 빈을 등록하는 두 가지 방법을 살펴보자!
컴포넌트 스캔과 자동 의존관계 설정
회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있도록 하자
@Autowired 를 하면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌 -> 객체 의존관계를 외부에서 넣어주는 것 DI(Dependency Injection), 의존성 주입 / 생성자가 1개만 있으면 생략 ㄱㄴ
근데 오류 나요
왜??
memberService가 스프링 빈으로 등록되어 있지 않으니까.
컴포넌트 스캔 원리를 알아보면
@Component가 있으면 스프링 빈 자동 등록, @Component를 포함하는 @Controller, @Service, @Repository도 스프링 빈으로 자동 등록된다
그런데 현재 멤버 서비스는 그냥 순수한 자바 클래스니까 스프링이 이 친구를 안을 수 있는 방법이 없다
-> @Service를 넣어주자!
리포지토리에는 @Repository
짜잔
memberService와 memberRepository가 스프링 컨테이너에 스프링 빈으로 등록되었당
* 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 유일하게 하나만 등록해서 공유한다. 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
자바 코드로 직접 스프링 빈 등록하기
package hello.hello_spring;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import hello.hello_spring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
이렇게 쓰면 된다
DI방법에는 필드 주입, setter 주입, 생성자 주입이 있다. (생성자 주입 권장)
* @Autowired를 통한 DI는 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않음
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2025 1학기 스프링부트 스터디] 고윤정 #4주차 (1) | 2025.05.04 |
---|---|
[2025 1학기 스프링 부트 스터디] 남윤찬 #4주차 (0) | 2025.05.03 |
[2025 1학기 스프링 부트 스터디] 석준환 #4주차 (0) | 2025.04.29 |
[2025 1학기 스프링부트 스터디] 이종윤 #3주차 (0) | 2025.04.14 |
[2025 1학기 스프링부트 스터디] 김민서 #3주차 (0) | 2025.04.13 |