MyFaces CODI создает экземпляры бобов дважды
Я перевожу приложение JSF 2.1 на CDI. Чтобы иметь возможность использовать @javax.faces.bean.ViewScoped
аннотации, я пытаюсь использовать MyFaces CODI, как предложено здесь.
Приложение, кажется, работает как ожидалось, но я заметил, записав, что конструктор каждого из моих @Named
Beans вызывается дважды, когда я впервые получаю к нему доступ. Однако их init()
методы аннотированы @PostConstruct
выполняются только один раз.
Когда эти компоненты используются во второй или n-й раз, их конструктор вызывается только один раз, как обычно и ожидается.
Это не происходит, как только я удаляю баночки MyFaces CODI из своего приложения, поэтому я уверен, что это вызвано этим.
Это нормальное поведение, и если да, то почему? Влияет ли это на производительность или это может вызвать проблемы?
Я чувствую, что это может быть связано с созданием прокси, но это не на 100% ясно, на мой взгляд, поэтому я был бы очень признателен за объяснение.
Моя конфигурация:
- JSF 2.1
- Мохарра 2.1.6
- MyFaces CODI 1.0.5 (протестировано с полным комплектом или ядром + JSF 2.0+)
- (не связано: Primefaces 3.5 и Omnifaces 1.5)
- Glassfish 3.1.2, также протестирован на Jboss EAP 6.0 с такими же результатами
Благодарю.
2 ответа
Да, это все, что связано с созданием прокси, и это ожидаемое поведение с CDI. Смотрите это https://community.jboss.org/blogs/stuartdouglas/2010/10/12/weld-cdi-and-proxies, так как вы, вероятно, можете найти другие объяснения, которые говорят то же самое.
Но что касается того, почему это происходит с @javax.faces.bean.ViewScoped и CODI, то это потому, что CODI активирует расширение CDI, которое сканирует бины с помощью JSF ViewScope и заменяет его во время выполнения своей собственной реализацией на основе CDI.