CDI устанавливает прокси для bean-компонентов всех областей, кроме псевдоскопа @Dependent
.@Produces
аннотированный метод (короткий продюсер ) вызывается CDI всякий раз, когда ему нужно получить (новый) экземпляр компонента.Этот экземпляр затем помещается в некоторый пул для соответствующей области.
Прокси всегда будет возвращать экземпляр компонента из пула.Попробуйте добавить какое-либо сообщение отладки в метод источника, чтобы увидеть, как часто оно будет вызываться.Производитель для компонента @ApplicationScoped
должен вызываться только один раз, а производитель @RequestScoped
должен вызываться один раз за запрос.
В вышеприведенных примерах область применения метода производителя не предоставляется (область действияфабричный класс не используется для метода производителя), поэтому будет использоваться область по умолчанию (@Dependent).И это означает (поскольку для этой области не используется прокси-сервер), новый экземпляр будет внедрен каждый раз, когда CDI обнаружит @Inject A
.См. Также Вопрос и ответ и соответствующую документацию для получения более подробной информации.
Итак, к вашим конкретным вопросам:
- Ожидаемое поведение ожидается
- Прокси будут использоваться, только если область не
@Dependet
, которая является значением по умолчанию.