Предположим, у меня есть класс Car. В моем коде я хочу создать 10 автомобилей. Класс Car имеет некоторые аннотированные зависимости @Inject. Какой был бы лучший подход для этого?Как создавать экземпляры «на лету» в CDI
CDI имеет интерфейс провайдера, который я могу использовать для создания автомобилей:
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
К сожалению, это не работает, если у меня нет CarFactory, который имеет метод с @Produces аннотацией, которая создает автомобиль. Насколько он отражает реальный мир, что я не могу создавать автомобили без завода, я бы предпочел не писать заводы для всего. Я просто хочу, чтобы контейнер CDI создавал мою машину так же, как и любой другой компонент. Как вы рекомендуете создавать эти автомобили?
Это на самом деле то, что я использовал.Не могли бы вы исправить свой пример, аргумент конструктора не такой же, как атрибут класса: Car vs UIModule. Также я думаю, что инъекция должна быть аннотированной с помощью @New вместо @Any. И лучшим примером для метода use() будет тот, который показал бы, как вы получите экземпляр автомобиля. Например, 'carInstances.get()' – palto
@New устарел в CDI 1.1, предпочитая @Dependent beans. См. CDI 1.1, раздел 3.14. Я не понимаю, что случилось с использованием провайдера, т.е. e., 'CDI.current(). select (Car.class) .get()'? –
@MartinAndersson Первоначальная проблема заключалась в том, что мне пришлось создать фабрику для использования провайдера. Пример, который вы указали в комментарии, для меня совершенно незначителен. Может быть, вы могли бы создать ответ? – palto