представьте себе, продюсер для SessionFactory (в качестве примера):CDI - Производители и Отборочный не на вырабатываемый объекте
@Produces public SessionFactory produceSessionFactory(){}
Нет у меня есть второй производитель, который производит какой-либо другой объект, позволяет сказать DatabaseObject, и нужна ссылка на SessionFactory:
@Produces
public DatabaseObject produceDatabaseObject(SessionFactory factory){}
Нет, я могу использовать мой объект базы данных, как, что:
@Inject
DatabaseObject object;
Пока, так хорошо. Поэтому давайте предположим, что этот материал реализован в рамках и будет использоваться несколькими приложениями.
Теперь одно приложение решает, что хочет использовать другой SessionFactory, поэтому он реализует свой собственный продюсер и спецификатор:
@Produces
@CustomQualifier
public SessionFactory produceSessionFactory(){}
Но сейчас, насколько я знаю, я не мог использовать DatabaseObject с классификатором , потому что, разумеется, квалификатор используется только для продюсера для SessionFactory. Так что это не будет работать:
@Inject
@CustomQualifier
DatabaseObject object;
Следствием применения придется переопределять производителя DatabaseObject, имеющие абсолютно тот же код, или расширение базового производителя и просто добавить спецификатор:
@Produces
@CustomQualifier
public DatabaseObject produceDatabaseObject(@CustomQualifier SessionFactory factory){
return super.produceDatabaseObject(factory);
}
Это как-то производит код с моей точки зрения и становится веселым, если у вас много производителей.
Есть ли способ достичь этого без необходимости переопределения производителя? Так что в основном метод производителя вводит SessionFactory в отношении квалификатора на объект, который он производит?
Спасибо!
Но точка инъекции не решит проблему, поскольку мне все еще потребуется реализовать соответствующего производителя. В противном случае я получу неудовлетворенную ошибку зависимости на этапе проверки запуска? По последним причинам мне нужно будет предоставить вторую аннотацию без квалификатора, содержащую квалификатор SessionFactory, как параметр не привязывающего класса. Это как-то странно для «пользователя», я думаю .. – JDC