IoC: DI 라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라 주입 받아 사용하는 방법을 말한다.
스프링 IoC 컨테이너
빈
스프링 IoC 컨테이너가 관리하는 객체
장점
@Service
public class BookService {
// ...
// 이 빈이 만들어질 때 (스캔될 때)
@PostConstruct
public void postConstruct() {
System.out.println("==== hello ====")
}
}
테스트 시 장점
Repository를 구현하지 않은 상황에서 Service만을 단위 테스트 하고 싶을 때 가짜 객체를 주입해 줌으로써 테스트를 할 수 있다.
@RunWith(SpringRunner.class)
public class BookServiceTest {
@Mock
BookRepository bookRepository;
@Test
public void save() {
Book book = new Book();
when(bookRepository.save(book)).thenReturn(book);
BookService bookService = new BookService(bookRepository);
Book result = bookService.save(book);
assertThat(book.getCreated()).isNotNull();
assertThat(book.getBookStatus()).isEqualTo(BookStatus.DRAFT);
assertThat(result).isNotNull();
}
}