Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이분탐색
- 오일러 경로
- dfs
- 깊이 우선 탐색
- BFS
- 분할정복
- 확률
- 너비 우선 탐색
- 인터페이스
- 알고리즘
- spring boot
- Random variable
- 표본 추출
- dag
- 추론 통계
- 객체 지향 설계
- 재설치
- Probability Distribution Function
- 확률변수
- Solid
- 베이지안
- PostgreSQL
- 기술 통계
- 이진탐색
- divide and conquer
- 다형성
- 스프링
- Algorithm
- 확률분포
- 확률분포함수
Archives
- Today
- Total
말하는 감자
[스프링부트 스터디] 스프링 빈과 의존관계 본문
728x90
저번까지 도메인, 리파지토리, 서비스에 대한 로직 개발방법과 테스트 방법론에 대해 배웠다.
이제 그 결과들을 화면에 나타내주는 컨트롤러는 어떻게 개발해야 하는지 살펴보기 위해, 회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비한다.
방법 1. 컴포넌트 스캔과 자동 의존관계 설정
- 객체를 등록할 때 스프링 컨테이너에 딱 한개만 등록한다(싱글톤). 컴포넌트 스캔 어노테이션: @Repository, @Service
- 스프링 컨테이너에서 관리되는 스프링 빈 중 하나 등록된 객체를 찾아 사용한다. 자동 의존관계 설정 어노테이션: @Autowired
- 그 범위의 기준은 SpringBootApplication이 있는 패키지 단위이다. 그 범위밖에 아무리 컴포넌트 어노테이션을 넣어도 스프링 컨테이너에서 관리하지 않는다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Service
public class MemberService {
private final MemberRepository memberRepository;
// MemberService 객체 생성될 때 별도의 리파지토리를 갖지 않도록 (Dependency Injection)
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
...
}
@Repository
public class MemoryMemberRepository implements MemberRepository {
...
}
※ DI(Dependency injection) 필드 주입
@Controller
public class MemberController{
@Autowired private MemberService memberService;
}
※ DI(Dependency injection) setter 주입, public으로 노출
@Controller
public class MemberController{
private MemberService memberService;
@Autowired
public void setMemberService(MemberService memberService){
this.memberService = memberService;
}
}
DI는 보통 생성자로 초기에 세팅한다.
방법 2. 자바 코드로 직접 스프링 빈 등록하기
- 컨트롤러의 컴포넌트 스캔과 Autowired는 그대로 둔다.
- 새로운 클래스를 작성해서 스프링 빈 어노테이션을 지정한다: @Configuration, @Bean
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
설정을 통해 스프링 빈으로 등록하는 것의 장점은, DB가 바뀌어서 리포지토리를 바꿀 때 간단하게 할 수 있다는 것이다.
'Backend' 카테고리의 다른 글
[스프링부트 스터디] 서블릿 (2) - HttpServletRequest (0) | 2021.07.25 |
---|---|
[스프링부트 스터디] 서블릿 (1) (0) | 2021.07.22 |
[스프링부트 스터디] 스프링 DB 접근 기술 (0) | 2021.07.21 |
[스프링부트 스터디] 회원 관리하는 웹 MVC 개발 (0) | 2021.07.11 |
[스프링부트 스터디] 회원 관리하는 백앤드 개발 (0) | 2021.07.08 |
Comments