본문 바로가기
Programming

[스프링 입문] 스프링 빈과 의존 관계

by 선의 2022. 3. 24.

@Autowired

생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌
이것을 DI(Dependency Injection) ― 의존성 주입이라고 함
DI에는 필드 주입, setter 주입, 생성자 주입 세 가지가 있음(보통 생성자 주입을 권장)
스프링은 객체 의존관계 주입해주는 기능이 있는 프레임워크
애노테이션을 달지 않은 객체(= 스프링 빈으로 등록하지 않은 객체)는 DI가 동작하지 X

 

스프링 빈 등록하는 방법

(1) 컴포넌트 스캔과 자동 의존관계 설정

@Component(어노테이션)가 있으면 스프링 빈으로 자동 등록
@Controller가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문
@Component는 @Controller, @Service, @Repository에 포함되어 있음
즉, 컨트롤러, 서비스, 레포지토리 애노테이션을 달면 스프링 빈으로 자동 등록된다

강의자료에 포함된 위의 사진처럼, 컨트롤러 → 서비스 → 레포지토리에 등록하는 패턴은 정형화되어 있음

(2) 자바 코드로 직접 스프링 빈 등록

@Service, @Repository, @Autowired 애노테이션을 제거하고,
SpringConfig 클래스를 생성하여 @Configuration을 달아준다

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
public class SpringConfig {
	@Bean
	public MemberService memberService() {
		return new MemberService(memberRepository());
 	}
	@Bean
 	public MemberRepository memberRepository() {
		return new MemoryMemberRepository();
 	}
}