Я отношусь к IOC и DI, но я предполагаю, что здесь отсутствует какой-то высокоуровневый дизайн, но я не могу понять, как заставить мою архитектуру работать.Spring IOC DI с параметрами времени выполнения
У меня есть конечная точка REST API, которая принимает два элемента данных POST: идентификатор клиента и идентификатор типа. В остальном api необходимо вернуть набор данных для этой конкретной группы клиентов/типов.
Вот грубая картина того, что я делаю:
Контроллер принимает объект идентификаторы, переданный в через почтовые данные, и через хранилище JPA получать соответствующие Entities для них.
Затем я создаю объект генератора данных (который принимает сущности в качестве параметров конструктора) и использует его для обработки всех сборок данных для API.
Проблема: потому что генератор данных принимает два динамических параметров конструктора, он не может быть DI'ed в контроллер, но вместо этого должны быть сделаны с new
. Однако внутри Data Generator мне нужен доступ к репозиториям JPA. Единственный способ получить доступ к этим репозиториям - через DI. Однако я не могу DI, так как объект был new
'ed не DI'ed контейнером IOC.
Есть ли способ архитектовать это, чтобы у меня не было этой проблемы? Я нарушаю некоторые правила относительно МОК? Есть ли у меня неправильные предположения? Любые советы приветствуются.
Спасибо!
Edit: Псевдо-код для генератора данных
public class DataGenerator {
private Customer customer;
private Type type
public DataGenerator(Customer customer, Type type) {
this.cusomter = customer;
this.type = type;
}
public generateData() {
if(customer == x && type == y) {
//JPA REPOSITORY QUERY
} else {
//DIFFERENT JPA REPOSITORY QUERY
}
}
}
Вопрос может быть более понятным, если бы предоставил короткий код генератора. –
Спасибо за ввод - предоставлен псевдо-код. – Rece