Привет. Я думаю, что я должен написать это здесь.

Прежде всего. Вы не можете сказать:

Внедрение зависимостей (DI) или Инверсия управления (IoC) — это наиболее важная функция Spring Framework, которая лежит в основе всех модулей Spring.

DI и IoC не равны. IoC — это не шаблон, а DI. Об этом можно прочитать в этой статье. Я бы сказал, что DI — это реализация принципа IoC. Да, я знаю, что иногда терминология вызывает споры, но вы предоставили ссылку на документацию Spring, которая цитирует статью Фаулера.

Тогда я продолжу.

Давайте посмотрим на ваш пример:

@Component
class Address {
    // some code
}
class Student {
    int id;
    
    @Autowired    
    Address address;
    
    Student() {
        // no instantiation needed
    }
    
    // other methods.
}
  1. Вы пропустили аннотацию @Component в классе Student.
  2. Ваш пример теперь связан не с классом Address, а с самим Spring Framework. Вы не сможете инициализировать его без отражения или Spring. Я думаю, что вы должны были использовать этот тип инъекции, так как внедрение поля считается плохой практикой.

Я бы не стал упоминать ваш пример, но он нарушает пункты, которые вы пытаетесь доказать.

И еще один момент по Spring Boot.

Spring Boot предоставляет функцию автоматической настройки, с помощью которой создается базовая конфигурация, необходимая для использования этих платформ в нашем приложении. Нам не нужно выполнять эти настройки вручную

Я бы сказал, что Spring Boot не предназначен для предоставления настроек по умолчанию. Spring boot — это возможность автоматически импортировать конфигурации Spring по мере добавления так называемых стартеров в свой путь к классам. То, что вы здесь написали, называется конвенция важнее конфигурации. Мне было бы трудно использовать стартеры без предопределенных значений по умолчанию.

Тем не менее, спасибо за статью! Я не пытался сказать, что вы не правы, просто указал на другой взгляд на концепции, которые вы пытаетесь описать. Я открыт для дискуссий, если хотите.