如何将Spring bean注入Seam上下文?

时间:2009-12-14 18:25:38

标签: java spring seam

我需要将一个Spring bean注入Seam上下文。除非我将spring bean声明为EJB,否则我无法将其注入到其他由seam管理的组件中。但是当我这样做时,所有弹簧注入的字段都是无用的,因为Seam在运行时创建了新的实例。

我还尝试将<seam:component/>元素添加到spring bean定义中,并尝试将其注入到目标类中带有@In("beanId")注释的容器中,但我总是以NullpointerException结束。

修改

我阅读了在线文章并按照他们的说法行事。我的弹簧组件也被添加到接缝上下文中(我可以说,因为当我在接缝中定义一个具有相同ID的时候,它会抱怨)。看起来@In没有发现....

4 个答案:

答案 0 :(得分:3)

您是否阅读过this chapter?它应该告诉你到底要做什么。

答案 1 :(得分:1)

拉​​乌尔,

虽然我没有将Seam与Spring一起使用,但是chapter 15的Seam In Action书籍谈到了Spring集成。它是免费的,并且已更新。

你说过

  

我还尝试将元素添加到spring bean定义中并尝试将其注入容器中,并使用@In(“beanId”)

Seam in Action书中说

  

@In注释中使用的EL表达式#{tournamentManager}解析为Spring容器中等效命名的bean,由委托变量解析​​器提供

您是否必须使用@In(“#{beanId}”)而不是@In(“beanId”),不是吗?

我见过

默认情况下,&lt; seam:component /&gt;将在bean定义中创建一个STATELESS Seam组件,其中包含类和名称

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

  

&lt; seam:component /&gt;的范围属性如果你想要Spring bean,可以使用它   在特定的Seam范围内管理。如果是,则必须将Spring bean 限定为原型   指定的接缝范围不是STATELESS

你上面做过吗?

答案 2 :(得分:1)

我有一个使用Seam + Spring的项目,当我想将Spring bean注入我的Seam组件时,我必须设置@In(create = true),否则我会得到一个NullPointerException,你应该尝试一下。

答案 3 :(得分:0)

我遇到了和你一样的问题。我严格遵循seam ref中的“Chapter 27. Spring Framework integration”。文献。但我的春豆从来没有注入接缝部件。最后,我发现我的接缝组件中有@BypassInterceptors。通过删除该注释,我的spring bean被成功注入。然后我意识到,依赖注入由接缝BijectionInterceptor处理。因此,@ BypassInterceptors将有效地绕过这个过滤器:)