kyupid / java-chess-again

자바/스프링 웹 전반 공부
4 stars 0 forks source link

`@Autowired` 필드 인젝션 not recommanded 이유 #30

Open kyupid opened 2 years ago

kyupid commented 2 years ago

image

학습하기

kyupid commented 2 years ago

필드 인젝션시에 DI 로 밖에 빈을 등록할수밖에 없으므로 유연하지못하다(테스트 등) 테스트 시에 순수자바코드로 테스트할수없다. 할려면 스프링컨테이너를 띄어야한다

@Test
public void fieldInjectionTest() {
    Service service = new Service();
    service.setSomeRepository(new MemoryExampleReposirory);
    service.saveUser(new User());
}

이런식으로 순수자바코드로 하려면 보다시피 setSomeRepository로 새로운 리포지토리를 넣어줘야하는데 필드에서 @Autowired하면 DI 로밖에 넣을수없기때뭄에 어쩔도리가 없음 영한님 말씀으론 위 이유릉 예시로 들어서 말씀하시는데 이거가지곤 잘 납득이 안되긴하다. 그냥 테스트할때 컨테이너 띄우면 안되나? 테스트가 많으면 너무 오래걸려서인가?