Как мне заполнить Wicket @SpringBeans в Scala? - PullRequest
3 голосов
/ 18 июня 2011

У меня есть калитка Page с @SpringBean

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

и я обнаружил, что @SpringBean не заполнен. Не имеет значения, если screenDao является val или var, защищенным или приватным.

Просматривая дерево, я обнаружил, что конструктор Component (косвенно) инициализирует @SpringBean s от имени его подклассов, но затем присвоение null неинициализирует его. Но назначение требуется Scala.

Как я могу предотвратить это поведение?

1 Ответ

6 голосов
/ 18 июня 2011

Попробуйте

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

Я не пробовал этого, но также думаю о запуске проекта Wicket / Scala и увидел эту запись в блоге , которая может быть полезна и другими способами.

Соответствующий раздел цитируется в этом блоге:

Кроме того, обратите внимание, что поле назначено подчеркиванию (_), которое указывает компиляции Scala НЕ инициализировать, но оставляет его в состоянии по умолчанию (в данном случае пустое). Это необходимо для инъекции, чтобы работать. Если вы присвоите ему значение null явно, вы перезапишет bean-компонент Spring, поскольку внедрение произойдет до того, как будет выполнен конструктор MyPage.

...