나는 Spring에서 Dependency Injection을 한동안 사용 해 왔으며 그것이 어떻게 작동하고 그것을 사용하는 장단점이 무엇인지 이해합니다. 그러나 새 클래스를 만들 때 종종 궁금합니다.이 클래스는 Spring IOC 컨테이너에서 관리해야합니까?
그리고 @Autowired 주석, XML 구성, setter 주입, 생성자 주입 등의 차이점에 대해 이야기하고 싶지 않습니다. 내 질문은 일반적인 질문입니다.
변환기가있는 서비스가 있다고 가정 해 보겠습니다.
@Service
public class Service {
@Autowired
private Repository repository;
@Autowired
private Converter converter;
public List<CarDto> getAllCars() {
List<Car> cars = repository.findAll();
return converter.mapToDto(cars);
}
}
@Component
public class Converter {
public CarDto mapToDto(List<Car> cars) {
return new ArrayList<CarDto>(); // do the mapping here
}
}
분명히 변환기에는 종속성이 없으므로 자동 배선 할 필요가 없습니다. 그러나 나를 위해 그것은 자동 유선으로 더 나은 것 같습니다. 코드는 더 깨끗하고 테스트하기 쉽습니다. DI 없이이 코드를 작성하면 서비스는 다음과 같습니다.
@Service
public class Service {
@Autowired
private Repository repository;
public List<CarDto> getAllCars() {
List<Car> cars = repository.findAll();
Converter converter = new Converter();
return converter.mapToDto(cars);
}
}
이제 테스트하기가 훨씬 어렵습니다. 또한 항상 같은 상태에 있어도 오버 헤드처럼 보이는 모든 변환 작업에 대해 새 변환기가 만들어집니다.
Spring MVC : 저장소를 사용하는 서비스 및 서비스를 사용하는 컨트롤러에는 잘 알려진 패턴이 있습니다. 그런 다음 리포지토리가 자동 연결되어 있으면 (일반적으로) 서비스도 자동 연결되어야합니다. 그리고 이것은 매우 분명합니다. 그러나 @Component 주석은 언제 사용합니까? 정적 유틸리티 클래스 (예 : 변환기, 매퍼)가있는 경우 자동 와이어 링합니까?
모든 수업을 자동으로 연결하려고하십니까? 그런 다음 모든 클래스 종속성을 주입하기 쉽습니다 (다시 한 번 이해하고 테스트하기 쉬움). 아니면 꼭 필요한 경우에만 자동 와이어 링을 시도합니까?
자동 배선 사용시기에 대한 몇 가지 일반적인 규칙을 찾는 데 시간을 보냈지 만 구체적인 팁을 찾을 수 없었습니다. 일반적으로 사람들은 "DI를 사용합니까? (예 / 아니오)"또는 "어떤 종류의 의존성 주입을 선호합니까"에 대해 이야기하는데, 제 질문에 대답하지 않습니다.
이 주제에 관한 팁에 감사드립니다!