티스토리 뷰
반응형
스프링 IoC 컨테이너와 빈
IoC 컨테이너란
- BeanFactory
- Bean 설정 및 정의를 읽어들이고, Bean을 구성하고 제공하는 것이다.
Bean이란
- IoC 컨테이가 관리하는 객체를 말한다.
- Bean은 IoC 컨테이너에 의해 인스턴스화되고, 관리된다.
- IoC 컨테이너에 의해 인스턴스화 된 Bean은 getBean을 통해 가져와 사용할 수 있고, @Autowired라는 어노테이션을 사용하여 의존 객체(IoC 컨테이너에 의해 생성된 객체)를 주입받을 수도 있다.
IoC 컨테이너와 Bean
- 스프링 IoC 컨테이너에 등록되어 있는 Bean들은 Scope 자체가 싱글톤으로 구성되어 있다.
라이플사이클 인터페이스 제공
Bean이 만들어지는 시점에서 클라이언트가 임의적으로 하고 싶은 행동을 주입할 수 있다.
Ex. @PostConstruct를 사용
@PostConstruct public void postContstruct() { System.out.Println("-----------"); System.out.Println("내가 하고 싶은 행위"); }
의존성 주입
어떤 객체가 사용하는 의존 객체를 직접 생성하는게 아니라, 스프링에서 주입 받아 사용하는 것을 말하고, 이 때 주입해주는 것이 IoC 컨테이너에서 정보를 가져오는 것이다.
A객체가 B객체를 의존하고 있고, IoC 컨테이너에 의해 의존성 주입을 받는 다면, A객체는 단일 테스트 하기가 어렵다
Why? 테스트를 진행할 때는 IoC 컨테이너를 통해 의존 객체를 받아올 수 없기 때문이다.
그러면 IoC 컨테이너를 통한 의존성 주입을 받지 않으면 되지 않을까?
- 이 방법은 더욱 어려워 진다. 소스를 통해 살펴보자
//CustService 객체 public class CustService { //1. CustSerVice 내부에서 CustRepository 직접 의존 private CustRepository custRepository = new CustRepository(); //CustService객체안에 custRepository 객체를 직접 생성하므로 순수하게 CustService만을 테스트할 수 없다. //2. 의존성 주입을 통해 의존 private CustRepository custRepository; public CustService(CustRepository custRepository) { this.custRepository = custRepository; } //테스트에서는 IoC 컨테이너에서 의존성 주입을 받지 못하므로 일반적인 방법으로는 테스트하기가 어렵다. -> 테스트에서 가짜 객체를 만들면 된다!(@Mock) public cust(Cust cust) { return custRepository.save(cust); } } //CustRepoistory 객체 public class CustRepoistory { public Cust save(Cust cust) { return null; } }
//Test 2번을 해결해보자
public class CustServiceTest {
//가짜 객체를 만든다.
@Mock
CustRepository custRepository;
@Test
public void save() {
Cust cust = new Cust();
//save메서드가 실행될 때 cust가 들어오면 cust를 리턴하라는 내용
when(custRepository.save(cust)).thenReturn(cust);
}
}
```
- 즉, 테스트에서 의존성 주입 역할을 사용하려면 @Mock을 통해 가짜 객체를 만든 후 사용하면 된다..
반응형
'Spring > Spring 핵심' 카테고리의 다른 글
[스프링 핵심] Environment (0) | 2019.12.29 |
---|---|
[스프링 핵심] Bean의 Scope (0) | 2019.12.29 |
[스프링 핵심] @Component와 component-scan (0) | 2019.12.29 |
[스프링 핵심] @Autowired (0) | 2019.12.29 |
[스프링 핵심] ApplicationContext와 여러 Bean 설정 방법 (0) | 2019.12.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 김영한
- 점층적 생성 패턴
- effectivejava
- 생성자
- 이펙티브자바
- @Lazy
- junit
- 이펙티브 자바
- jdk버전
- package-private
- mustache
- flatMap
- 빌더 패턴
- 인프런
- Effective Java
- 빈 순환 참조
- ifPresent
- 정적팩터리메서드
- 자바8
- JPA
- 연관관계
- java8
- 복사 팩토리
- Spring
- java
- springboot
- 스프링부트
- try catch finally
- try with resources
- 팩토리 메소드 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함