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

강은서·2022년 1월 11일
0

Spring

목록 보기
4/11
post-thumbnail

스프링 빈을 등록하는 방법에는 두가지 방법이 있다.
1. 컨포넌트 스캔과 자동 의존 관계 설정
2. 자바코드로 직접 스프링 빈 등록

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

  • 회원 컨트롤러가 회원 서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비한다.
    • 회원 컨트롤러가 회원 서비스를 통해서 회원가입, 데이터 조회를 하는 것을 의존관계가 있다고 한다.
    • 스프링 컨테이너로 부터 받아서 쓰도록 해야한다.
      • priavte final MemberService memberService = new MemberService();
      • 다음과 같이 service를 여러개 생성할 필요가 없음.
      • 스프링 빈을 통해서 스프링 컨테이너에 등록하고 사용한다.
    • 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.(유일하게 하나만 등록해서 공유한다.) 따라서 같은 스프링 빈이면, 모두 같은 인스턴스다.
@Controller

public class MemberController{
	private fainal MemberService memberService;

	@Autowired
	//스프링 컨테이너에 등록
	public class MemberController(MemberSerivece memberservice){
		this.memberService = memberService;
	}
}
  • 생성자에 @Autowired가 있으면, 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존 관계를 외부에서 넣어주는 것을 DI(Dependency Injection) 의존성 주입이라고 한다.

    • 하위 패키지를 포함한 component만 포함된다.
  • controller만 스프링 빈을 등록하면, service는 스프링 빈에 등록되지 않았기 때문에 오류가 발생한다.

    Consider defining a bean of type ‘hello.hellospring.service.MemberService’ in your configuration

  • @Component를 포함하는 다음 annotation은 스프링 빈으로 자동 등록된다.
    • @Controller
    • @Service
    • @Repository

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

기존 코드에서 작성한 회원 서비스와 회원 리포지토리의 @Service , @Repository , @Autowired annotation을 제거하고 진행한다.

  • SpringConfig.java
@Configuration

public class SpringConfig{

	@Bean
	public MemberService emeberSerivce(){
			return new MemberSerivcememberRepository());
	}
	
	@Bean
	public MemberRepository memberRespository(){
		return new MemoryMemberRepository();
	}
}
  • 요즘은 생성자 주입을 권장한다.

다음 글은 인프런 김영한 강사님의 스프링 강의 복습용입니다 :)

0개의 댓글