2012-04-25 4 views
0

Я все еще не на 100% понятен, но так голый со мной.CDI: Получение нулевого значения вместо нового экземпляра

Я считаю, что если вы введете компонент с помощью ApplicationScope, и он никогда не был инстанцирован, CDI даст вам нулевое значение.

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

В JSF-инъекции Dependency вам никогда не приходилось создавать его один раз. Я считаю, что JSF будет делать что-то вроде

//pseudo code 
AtStartUp() { 
if (applicationScoped) 
create new Instance(); 

или, возможно,

AtInjectionPoint() { 
if (applicationScoped && null) 
return new Instance(); 

else return Instance; 

Хотя я считаю, КДИ делает что-то вроде

AtInjectionPoint() { 
return Instance; 

Можете ли вы следовать за мной здесь? Моя проблема заключается в том, что в каждом случае каждый экземпляр с компонентами, который есть, имеет значение null, если мы его не создадим. Нам бы очень хотелось, чтобы CDI каким-то образом справлялся с этим и вел себя как один из первых двух примеров псевдокодов ...

Кто-нибудь знает об этом больше? Кажется, очень сложно найти информацию об этом.

ответ

1

Бин CDI автоматически создается контейнером в момент его обращения в первый раз. Не нужно создавать его самостоятельно.

Я не уверен, почему вы испытываете такое поведение. Может быть, вы смешиваете аннотации jsf с bean-аннотациями с аннотациями CDI? Или вы пытаетесь получить доступ к инъецируемому компоненту в конструкторе?

+0

Yepp смешанный. Был довольно уверен, что я отредактировал его из faces-config, но каким-то образом он застрял со мной. Спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^