CDI-перехватчики и декораторы применяются только к фасоли, которые создаются контейнером CDI.
Однако, есть уродливое обходное решение. Это немного технично, но медведь со мной. Я пишу это в основном без IDE, поэтому я извиняюсь за опечатки и т. Д., Это просто дать вам представление.
Сначала вам нужно создать спецификатор
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER})
public @interface InjectionParameter {
int value();
}
Затем вам нужно аннотировать специальный конструктор, как это:
@Inject
public MyClass(@InjectionParameter(1) Object firstParam, @InjectionParameter(2) Object secondParameter)
Тогда для производителя вы говорите,
@Inject
private Instance<MyClass> myClassInstance;
@Produces
@InjectionParameter(1)
Object firstParam;
@Produces
@InjectionParameter(2)
Object secondParam;
@Produces MyClass producer() {
firstParam = null; /* set your first param here */
secondParam = null; /* set your second param here */
return myClassInstance.get();
}
Обратите внимание, что мое использование объекта было всего лишь примером, пожалуйста, замените его собственными фактическими типами :)
Дело в том, что контейнер CDI CAN может создавать экземпляры beans, которые не имеют конструктора по умолчанию, если соответствующий конструктор аннотируется с помощью @Inject , и каждый параметр является допустимым целевым объектом для инъекций. Что я там сделал, были настроены параметры вашего компонента по полям производителя.
Обратите внимание, что я фактически не тестировал это с контейнером CDI, поэтому вам, возможно, придется точно настроить решение. Вы можете получить двусмысленное преобразование бобов между методом производителя и самим компонентом, которые вы можете решить, добавив еще один классификатор в bean-компонент и в поле экземпляра производителя.
Надеюсь, это поможет. -Juuso
Если у вас есть та же проблема, ответ на другой вопрос должен ответить на ваш вопрос. Если у вас другая проблема, отправьте фрагменты кода, то, что вы пробовали, и какие ошибки вы получите, чтобы помочь людям ответить на ваш вопрос. На ваш вопрос очень сложно ответить. См. Также http://stackoverflow.com/help/how-to-ask – Buurman
Я редактирую вопрос, чтобы очистить его. – Luciano