【问题标题】:How do I populate Wicket @SpringBeans in Scala?如何在 Scala 中填充 Wicket @SpringBeans?
【发布时间】:2011-06-18 10:19:59
【问题描述】:

我有一个检票口Page 和一个@SpringBean

class ScreenDetailsPage(parameters: PageParameters) extends BasePage(parameters) {
    @SpringBean(name = "screenDAO") protected var screenDao: DAO[Screen] = null
    assertNotNull(screenDao)

我发现 @SpringBean 没有填充。 screenDao 是 val 还是 var、protected 还是 private 都没有区别。

查找树我发现Component 的构造函数(间接)代表其子类初始化@SpringBeans,但随后对 null 的赋值将取消初始化它。但是 Scala 需要赋值。

如何防止这种行为?

【问题讨论】:

    标签: spring scala wicket


    【解决方案1】:

    试试

    class ScreenDetailsPage(parameters: PageParameters) extends BasePage(parameters) {
        @SpringBean(name = "screenDAO") protected var screenDao: DAO[Screen] = _
        assertNotNull(screenDao)
    

    我还没有尝试过,但我也在考虑开始一个 Wicket/Scala 项目,并看到了 this blog entry,这可能在其他方面也很有用。

    从该博客引用的相关部分是

    另外,请注意该字段被分配了一个下划线 (_),它告诉 Scala 编译器不要初始化,而是将其保持在默认状态(在这种情况下为 null)。这是注射工作所必需的。如果你明确地将它分配给 null,你 将覆盖 Spring bean,因为注入将在 MyPage 的构造函数执行之前发生。

    【讨论】:

    • 我喜欢这个地方,谁能想到我可以在周六的 15 分钟内得到答案!
    • 现在唯一的小烦恼是它只能作为 var 而不是 val 工作,即使字段被标记为 final,Java 代码也能工作。但我会感激地接受我能得到的,因为它比我之前的 InjectorHolder.getInjector.inject(this) 修复要干净得多。
    • 顺便说一句 - 我在 Scala 和 Wicket 上玩得很开心。我才刚刚开始在 Scala 中编写我的 Pages,但到目前为止它非常适合测试。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多