Как внедрить bean-компонент Spring в контекст Seam? - PullRequest
0 голосов
/ 14 декабря 2009

Мне нужно добавить bean-компонент Spring в контекст Seam. Если я не объявлю Spring Bean как EJB, я не смогу внедрить его в другие компоненты, управляемые швом. Но когда я делаю это, все вставленные весной поля становятся бесполезными, потому что Seam создает новые экземпляры во время выполнения.

Я также пытался добавить элемент <seam:component/> в определение bean-компонента и пытался внедрить его в контейнер с пометкой @In("beanId") в целевом классе, но я всегда получаю исключение NullpointerException ...

EDIT:

Я прочитал онлайн-статьи и сделал, как они говорят. Мой весенний компонент также добавляется в контекст шва (я могу сказать, потому что, когда я определяю один с тем же идентификатором в шве, он жалуется). Похоже, @In не поднимает ....

Ответы [ 4 ]

3 голосов
/ 14 декабря 2009

Вы читали эту главу ? Он должен точно сказать вам, что делать.

1 голос
/ 09 января 2010

У меня есть проект, использующий Seam + Spring, и я должен установить @In (create = true), когда я хочу внедрить bean-компонент Spring в мой компонент Seam, в противном случае я получаю исключение NullPointerException, вы должны попробовать его.

1 голос
/ 14 декабря 2009

Raoul,

Хотя я не использую Seam вместе с Spring, глава 15 книг Seam In Action рассказывает об интеграции Spring. Это бесплатно и обновляется.

Вы сказали

Я также попытался добавить элемент в определение bean-компонента и попытался внедрить его в контейнер с помощью @In ("beanId")

Книга «Шов в действии» гласит:

Выражение EL, используемое в аннотации @In, # {tourManager}, преобразуется в bean-объект с эквивалентным именем в контейнере Spring, любезно предоставленный решателем делегирующей переменной

Вы должны использовать @In ("# {beanId}") вместо @In ("beanId"), не так ли?

Я видел

По умолчанию создаст STATELESS Seam компонент с классом и именем , указанными в определении компонента.

<bean id="someSpringBean" class="SomeSpringBeanClass" scope="prototype">
    <seam:component/>
</bean>

И

Атрибут области действия может использоваться, если вы хотите, чтобы bean-компонент Spring был Управляется в определенной области шва. Spring bean должен быть ограничен прототипом , если Указанная область шва отличается от STATELESS .

Вы сделали как выше?

0 голосов
/ 27 января 2013

У меня такая же проблема, как и у вас. Я строго следовал «Главе 27. Интеграция Spring Framework» в ссылке на шов. документ. Но мой весенний боб никогда не вводили в шовный компонент. И, наконец, я узнал, что в моем компоненте шва есть @BypassInterceptors. После удаления этой аннотации мой весенний боб был успешно введен. Затем я понял, что внедрение зависимостей обрабатывается швом BijectionInterceptor. Таким образом, @BypassInterceptors будет эффективно обходить этот фильтр:)

...