Warehouse и Worker можно сделать Spring-бинами, если это сервисы единого склада; Product обычно остаётся обычной моделью данных. Обратную ссылку Worker → Warehouse внедрять необязательно.
Определение Spring‑бинов для модели склада и сотрудников
Warehouse и Worker можно сделать Spring-бинами, если это сервисы единого склада; Product обычно остаётся обычной моделью данных. Обратную ссылку Worker → Warehouse внедрять необязательно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеются три сущности: Warehouse, Worker и Product. Worker отвечает за добавление Product в Warehouse. Внутри Warehouse реализован метод addProduct(), который делегирует вызов своему Worker. После выполнения Worker помещает объект Product в внутренний список товаров склада.
Требуется с помощью Spring Framework описать следующее:
- Классы‑модели:
Warehouse,Worker,Product. - Логику их взаимодействия при операции добавления продукта.
- Указать, какие из этих классов следует оформить как Spring‑бины (например, с аннотациями
@Component,@Service,@Repositoryи т.п.).
Ответ
Warehouse и Worker можно сделать Spring-бинами, если это сервисы единого склада; Product обычно остаётся обычной моделью данных. Обратную ссылку Worker → Warehouse внедрять необязательно.
@Component
class Warehouse {
private final Worker worker;
private final List<Product> products = new ArrayList<>();
Warehouse(Worker worker) { this.worker = worker; }
public synchronized void addProduct(Product product) {
worker.add(product, products);
}
}
@Service
class Worker {
public void add(Product product, List<Product> products) {
products.add(Objects.requireNonNull(product));
}
}
record Product(String name) {}
Показана учебная модель хранения в памяти; Spring/JDK imports опущены. Циклического DI нет. Для нескольких складов Warehouse лучше сделать отдельной доменной сущностью, а операции вынести в stateless-сервис с репозиторием; singleton-список не заменяет БД.