Основная концепция внедрения зависимостей - насколько я понимаю - это практика «проектирования интерфейсов», чтобы сделать зависимые компоненты слабо связанными друг с другом.Однако я видел много систем, разработанных с использованием Spring, которые, по моему мнению, нарушают эту концепцию [а Spring Container позволяет это делать на уровне синтаксиса].Я начинаю подвергать сомнению мои знания / понимание внедрения зависимостей как концепции после просмотра такого кода / реализации.
Я регулярно вижу компоненты, автоматически подключаемые друг к другу с их конкретной реализацией, пример того, что я имею в виду:
@RestController
public class MyRestController {
@AutoWired
private MyServiceOne serviceOne;
// .. rest of the code if the rest controller here ...
}
@Service
public class MyServiceOne {
@Autowired
private MyRepository repo;
// rest of code of the service here
}
Как видите, MyServiceOne - это конкретный класс, а не интерфейс, и Spring Framework с этим согласен.В классе «@Configuration» не нужно указывать метод «@Bean», чтобы внедрить правильный конкретный тип класса [поскольку @service уже является конкретным классом].
Таким образом, для любых изменений / настроекна сервисном уровне [введенная зависимость в контроллере] мне придется изменить следующую строку в контроллере:
@AutoWired
private MyServiceOne serviceOne; //change this to be another service class, or a service class that extends it
, и это НЕ слабая связь![или это?] по моему мнению, если мы собираемся использовать Spring DI таким образом, лучше НЕ использовать его вообще!множество зависимостей maven / Gradle и объектов времени выполнения создаются в памяти приложения!
Мне интересно, что-то не хватает в моем понимании того, как Dependency Injection представляет собой концепцию / или как Spring HandleИнъекция зависимости?
ценим ваше руководство!