2009-12-14 68 views
0

我需要將Spring bean注入到Seam上下文中。除非我將spring bean聲明爲EJB,否則我無法將其注入其他接縫管理組件。但是當我這樣做時,所有Spring注入的字段都是無用的,因爲Seam會在運行時創建新的實例。如何將Spring bean注入到Seam上下文中?

我也試圖在<seam:component/>元素添加到春季bean定義,並試圖與目標類的@In("beanId")註解注入它在容器中,但我總是一個NullPointerException結束了......

編輯:

我閱讀在線文章並按照他們的說法做了。我的彈簧組件也被添加到接縫上下文中(我可以說,當我在接縫中定義一個具有相同ID的接口時,它會發出抱怨)。看起來像@In不拾起....

+0

你使用的是什麼版本的Spring? – Zach 2009-12-14 19:47:32

+0

@Zach:我使用2.5.3版本 – raoulsson 2009-12-14 19:57:29

+0

你如何測試你的應用程序?您是否將SeamT​​est與嵌入式JBoss Embedded服務器一起使用? – 2009-12-14 20:18:16

回答

1

拉烏爾,

雖然我不使用Spring,Seam的的chapter 15在行動的書籍約Spring集成談判沿着使用Seam。它是免費的,並已更新。

你說

我也試圖將元素添加到彈簧bean定義,並試圖與@In(「將beanId」)

縫在容器中注入它操作書說

@In註釋中使用的EL表達式,#{tournamentManager},在Spring容器中解析爲一個等價命名的bean,由委託變量resolv er

您是否必須使用@In(「#{beanId}」)而不是@In(「beanId」),不?

我見過

默認情況下,<縫:組件/ >將創建一個無狀態Seam組件帶班和名稱在bean定義中提供。

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

而且

<縫的scope屬性:如果你希望Spring bean是 在一個特定的Seam範圍管理可用於組件/ >。如果指定的Seam範圍是除STATELESS以外的其他任何東西,則必須將Spring bean 的範圍限定爲原型

您是否按照上述方法完成了?

+0

謝謝,我確切地閱讀了這篇文章,但它還沒有成功(但)... – raoulsson 2009-12-14 19:46:16

+0

是的,我做了所有這些。有EL,沒有EL。現在要設置一個SeamT​​est ... – raoulsson 2009-12-15 08:29:22

1

我有一個使用Seam + Spring的項目,當我想向我的Seam組件注入一個Spring bean時,我必須設置@In(create = true),否則我得到一個NullPointerException,你應該嘗試它。

0

我得到了和你一樣的問題。我嚴格遵循了「第27章Spring框架集成」。文件。但是我的春豆從未被注入縫部件。最後,我發現我的seam組件中有@BypassInterceptors。通過刪除該註釋,我的spring bean被成功注入。然後我意識到,依賴注入是由seam BijectionInterceptor處理的。因此,@BypassInterceptors將有效地繞過這個過濾器:)