Я пытаюсь сделать что-то вроде следующего:Как создать общий производитель для квалифицированных и расширенных CDI-компонентов?
@Qualifier
@Retention(RUNTIME)
@Target({ PARAMETER, FIELD, METHOD, TYPE })
public @interface ForQueueName{
String value();
}
public class JmsSenderProducer {
@Produces
@Any
@ApplicationScoped
public JmsSender createJmsSender(InjectionPoint ip) {
ForQueueName annotation = ip.getAnnotated().getAnnotation(ForQueueName.class);
return new JmsSender(annotation.value());
}
}
// Somewhere else
@Inject
@ForQueueName("java:/jms/queue/my.queue.name")
JmsSender myQueueSender;
Конечно, это не работает, потому что
@Any
не работает в качестве замены для любой квалифицированный@ForQueueName
InjectionPoint
не могут быть использованы при изготовлении фасоли@ApplicationScoped
.
Я знаю, что мог бы создать @Dependent
фасоль с непереплетным классификатором таким образом. Но в моем случае я действительно нуждаюсь в не зависимом объекте.
Возможно ли что-то подобное? Если нет, есть ли какая-то особая причина?
Приветствия, Tilmann
EDIT: Fixed имя сфера из @Default
в @Dependent
Для того, чтобы это было возможно, спецификация должна была бы предоставить другой объект вместо «InjetctionPoint», который обеспечивает доступ только к указанным квалификаторам инъекции. – Gandalf