Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSF 2.0 Resource injection for @ApplicationScoped, связь между бинами через ManagedProperty 
V
    Опции темы
vogdb
Дата 5.8.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



   Привет всем. Натолкнулся на странную штуку. Если иметь два бина с ApplicationScoped и один знает о другом через проперти, то получается так, что на самом деле не знает. Server в конструкторе имеет config == null. Никто не сталкивался? Есть ли решение?
Код

@ManagedBean(name = "config", eager=true)
@ApplicationScoped
public class Config {
...
}

@ManagedBean(name = "server")
@ApplicationScoped
public class Server {
   @ManagedProperty(value = "#{config}")
   private Config config;

   public Config getConfig() {
      return config;
   }

   public void setConfig(Config config) {
      this.config = config;
   }

   public ServerNavCntrl() {
      log.info("Initiated success. Config instance is " + config);
   }
...
}


Происходит это на jsf2.0.2 и glassfish3

Это сообщение отредактировал(а) vogdb - 5.8.2010, 18:14
PM MAIL   Вверх
powerOn
Дата 6.8.2010, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(vogdb @  5.8.2010,  19:14 Найти цитируемый пост)
Server в конструкторе имеет config == null. 


Вообще говоря, сначала происходит конструирование объекта, а только потом инъектирование зависимостей. Куда их инъектировать если объект еще не создан? А при создании объекта вызывается его конструктор. Короче говоря, если нужно сделать инициализацию, то смотрите аннотация @PostConstruct.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
vogdb
Дата 6.8.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



Спасибо, в очередной раз помогаете =)
PM MAIL   Вверх
Старовъръ
Дата 6.8.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Цитата
Вообще говоря, сначала происходит конструирование объекта, а только потом инъектирование зависимостей. Куда их инъектировать если объект еще не создан?
Совсем что-то не пойму. Если IoC видет инъекцию, то он инициализирует инъектируемый объект, а потом создает тот, куда сеттиться свойство, а потом только инъектит его. В JSF это происходит иначе?
PM MAIL WWW   Вверх
powerOn
Дата 7.8.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Старовъръ @  6.8.2010,  22:11 Найти цитируемый пост)
Если IoC видет инъекцию, то он инициализирует инъектируемый объект, а потом создает тот, куда сеттиться свойство, а потом только инъектит его.


Я затрудняюсь сказать, чей конструктор вызывается первым: зависимости или объекта которому нужна эта зависимость (хотя это не сложно проверить).  Могу лишь утверждать, что не создав объект в него зависимость не внедрить. Вызов конструктор, как часть процесса создания объекты происходит раньше, чем ему будут просечены зависимости. Что вполне естественно. Инъекции через параметры конструктора, насколько мне известно в JSF нет.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Старовъръ
Дата 7.8.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Если посмотреть на тот же Spring, он будет инициализировать все объекты, которые инжектятся, потом только те, в которые инжектятся и никак иначе. Любой IoC должен уметь разруливать зависимости. Мне кажется нужно все-таки искать ошибку где-то в другом месте.

Это сообщение отредактировал(а) Старовъръ - 7.8.2010, 11:31
PM MAIL WWW   Вверх
powerOn
Дата 7.8.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Старовъръ @  7.8.2010,  12:30 Найти цитируемый пост)
Если посмотреть на тот же Spring, он будет инициализировать все объекты, которые инжектятся, потом только те, в которые инжектятся и никак иначе. Любой IoC должен уметь разруливать зависимости. Мне кажется нужно все-таки искать ошибку где-то в другом месте.



Старовъръ, автор топика не может получить ссылку на зависимость внутри конструктора. Вы и в Spring её не получите внутри конструктора, если конечно не будет использовано construncor injection.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Старовъръ
Дата 7.8.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Оу, я прошу прощение, не заметил, что речь идет о конструкторе..
PM MAIL WWW   Вверх
powerOn
Дата 7.8.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Старовъръ @  7.8.2010,  12:53 Найти цитируемый пост)
Оу, я прошу прощение, не заметил, что речь идет о конструкторе.. 

Ничего страшного, главное что ситуация прояснилась. smile


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.