В Spring: нужно ли создавать Java-класс, если конфигурация задана в XML?

Ответ

Да, класс создавать обязательно. XML-конфигурация в Spring лишь описывает как создать и связать объекты (бины), но не заменяет сам Java-код.

Роль XML:

  • Объявляет бин и указывает его класс.
  • Задает зависимости (через конструктор или сеттеры).
<bean id="myService" class="com.example.MyServiceImpl">
    <property name="repository" ref="myRepository"/>
</bean>

Роль Java-класса:

  • Содержит исполняемую логику приложения.
  • Должен существовать по пути, указанному в атрибуте class.
package com.example;

public class MyServiceImpl {
    private MyRepository repository;
    // Setter и бизнес-методы должны быть реализованы здесь
    public void setRepository(MyRepository repo) {
        this.repository = repo;
    }
}

Без класса контейнеру Spring не из чего будет создавать экземпляр бина.

Ответ 18+ 🔞

А, ну тут, блядь, классика жанра! Сейчас объясню на пальцах, а то некоторые думают, что XML — это волшебная палочка, которая из воздуха объекты материализует.

Смотри, XML в Spring — это как инструкция по сборке шкафа из Икеи. Там нарисовано, какие доски куда прикручивать, какие винты использовать. Но если у тебя самих досок и винтов нет, то хоть обосрись с этими картинками — шкаф не появится, понимаешь?

Вот и тут так же. XML-конфиг — это просто бумажка, где написано:

<bean id="myService" class="com.example.MyServiceImpl">
    <property name="repository" ref="myRepository"/>
</bean>

Перевод на русский: «Эй, Spring, слушай сюда. Возьми-ка ты класс MyServiceImpl (который должен лежать в пакете com.example, ясен хуй), создай из него один экземпляр, назови его myService. А потом найди другой бин, myRepository, и воткни его через сеттер setRepository. Всё, свободен».

А теперь главный вопрос, ёпта: откуда взять этот самый класс MyServiceImpl? Его же кто-то должен написать! Контейнер Spring — он не шаман, чтобы из пустоты код генерить. Ему нужен готовый .class файл, с конструкторами, полями и методами. Без этого — ни хуя не выйдет.

Вот смотри, что должно быть в коде, иначе вся эта XML-писанина — просто пиздёж на вентилятор:

package com.example; // Тот самый пакет, да!

public class MyServiceImpl {
    private MyRepository repository; // Поле, в которое надо внедрить зависимость

    // А вот и тот самый сеттер, на который ссылается XML!
    // Если его не будет, Spring прилетит в пизду с ошибкой "No such property".
    public void setRepository(MyRepository repo) {
        this.repository = repo; // Воткни сюда то, что найдёшь по имени 'myRepository'
    }

    // Ну и дальше твоя бизнес-логика, ради чего всё и затевалось
    public void doBusiness() {
        repository.saveData();
        // и т.д.
    }
}

Короче, запомни раз и нахуй: XML говорит «ЧТО и КАК собрать», а Java-класс — это «ИЗ ЧЕГО собирать». Без «из чего» — это просто пиздабольство, контейнеру нечего будет инстанциировать, и он тебе выстрелит BeanCreationException прямо в ебальник.

Всё, вопрос закрыт. Не путай инструкцию с деталями, а то охуеешь потом на рантайме.