【问题标题】:How to inject a Spring bean into a Seam context?如何将 Spring bean 注入 Seam 上下文?
【发布时间】:2010-12-26 12:48:08
【问题描述】:

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

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

编辑:

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

【问题讨论】:

  • 你用的是什么版本的 Spring?
  • 你如何测试你的应用程序?你在使用带有嵌入式 JBoss 嵌入式服务器的 SeamT​​est 吗?
  • @Arthur:很多单元测试,通过 UI 层的自动化测试,在 selenium 上使用外部应用程序。一些集成测试会拉起弹簧上下文,而不是接缝……也许隔离问题的好主意,看看接缝上下文。

标签: java spring seam


【解决方案1】:

你读过this chapter吗?它应该准确地告诉你该怎么做。

【讨论】:

    【解决方案2】:

    拉乌尔,

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

    你说过

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

    Seam in Action 书说

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

    你必须使用@In("#{beanId}")而不是@In("beanId")吗?

    见过

    默认情况下, 将创建一个 STATELESS Seam 组件在 bean 定义中提供类和名称

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

    的 scope 属性可以使用,如果你希望 Spring bean 是 在特定的 Seam 范围内进行管理。 Spring bean 必须限定为原型,如果 指定的接缝范围不是 STATELESS

    你做到了吗?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-25
          • 2011-05-15
          • 1970-01-01
          • 2011-11-05
          • 2019-02-03
          • 1970-01-01
          • 2010-09-23
          • 2012-02-19
          相关资源
          最近更新 更多