Development/Spring
Spring Bean과 의존성 주입
우봉수
2023. 3. 10. 22:34
스프링 Bean이 무엇이지?
- 스프링 IoC 컨테이너가 관리하는 자바 객체
- 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너
- 가급적 스프링 빈에 모든 걸 등록해서 사용하는게 좋다
Spring 개발 패턴
- 콘트롤러(외부요청 받기)
- 서비스(비지니스 로직)
- 레포지터리(데이터 저장)
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
컴포넌트 스캔과 자동 의존관계 설정
- @Component 에노테이션이 있으면 스프링 빈으로 자동 등록된다.
- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
- @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
- @Controller
- @Service
- @Repository
- @Autowired
- 스프링 빈으로 등록된 클래스 대상으로만 실행됨
- 스프링 빈에 등록될때 싱글톤 패턴으로 등록하고 공유하도록 되어진다.
자바 코드로 직접 스프링 빈 등록하기
- @Configuration
- @Bean
- 상황에 맞추어 유연하게 바꾸는 것이 가능
DI 의존성 주입의 3가지 방법
- 생성자 주입
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
}
- 필드 주입
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MemberController {
@Autowired private final MemberService memberService;
}
- Setter 주입
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MemberController {
private MemberService memberService;
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
}