CreationalContext: должен ли пользовательский Бин всегда вызывать push () из своего метода create ()? - PullRequest
0 голосов
/ 06 мая 2018

Спецификация CDI гласит: :

Реализация Contextual [например, ваш пользовательский Bean] не требуется для вызова push(). Однако для определенных областей действия бина вызов push() между созданием экземпляра и внедрением помогает контейнеру минимизировать использование прокси-объектов клиента (что в противном случае потребовалось бы для разрешения циклических зависимостей).

Я долго боролся с тем, как это можно извлечь из реальной жизни.

Если я пишу переносимое расширение, и при этом я программно добавляю Bean экземпляров в контейнер, приносит ли он вред , чтобы всегда вызывать creationalContext.push(this) из моего Bean s create(CreationalContext) метод ? Существует ли в реальности перевод того, что означает «определенные области применения бобов»?

Я ищу что-то вроде "если ваш Bean будет в Frobnicator области, тогда не беспокойтесь, чтобы позвонить push(), но если он будет в Fizzbuzz области, то вы всегда хочу этим заниматься ». Очевидно, я также хотел бы понять обоснование такого совета.

1 Ответ

0 голосов
/ 09 мая 2018

Это может быть вопрос, который стоит задать в Списке рассылки CDI-dev как для фактического ответа, так и для запроса разъяснений в спецификации.

Как вы сами выяснили, это плохо документировано, поэтому я не смогу подтвердить то, что я могу здесь заявить, цитируя спецификацию, поэтому возьмите это с щепоткой соли.

Из того, что я помню, это использовалось в основном для циклических зависимостей при инжекции. Если вы этого не делаете, то вы можете игнорировать это. Кроме того, Weld решает для вас классический круговой впрыск, так что это действительно актуально только для @Produces и , возможно и @PostConstruct.

Целью всего этого является сохранение «частично созданного» экземпляра в контексте для удовлетворения разрешения и продолжения создания циклически зависимого компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...