2011-06-18 6 views
3

は私が@SpringBeanWicket @SpringBeansにScalaをどのように埋め込むのですか?

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

でウィケットPageを持っていると私は@SpringBeanが取り込まれていないことがわかります。 screenDaoがvalまたはvar、protectedまたはprivateの場合は違いはありません。

ツリーを調べると、Componentのコンストラクタは、そのサブクラスに代わって(間接的に)@SpringBeanを初期化しますが、nullへの代入は初期化されません。しかし、この割り当てはScalaによって要求されます。

どうすればこの現象を防ぐことができますか?

答えて

6

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

を試してみて、私はこれを試していないが、また、同様に他の方法において有用である可能性がある、ウィケット/ Scalaのプロジェクトを開始することを考え、そしてthis blog entryを見ています。

そのブログから引用し、関連するセクションでは、フィールドがScalaは初期化しないためにコンパイル伝えアンダースコア(_)、に割り当てられていることに注意しますが、デフォルトの状態でそれを残して、また

です(この場合はnull)。これは注射が機能するために必要です。明示的にヌルに割り当てると、 はMyPageのコンストラクタが実行される前にインジェクションが発生するため、Spring Beanを上書きします。

+1

私はこの場所が大好きです。私は土曜日に15分でこれに答えることができると思っていました。 –

+0

これは、フィールドが最終としてマークされている場合でもJavaコードが動作するvalではなく、varとしてのみ機能するという点でわずかな煩わしい点です。しかし、以前のInjectorHolder.getInjector.inject(これ)の修正よりはるかにクリーンなので、私が得ることができることを喜んで覚えています。 –

+0

BTW - 私はScalaとWicketで楽しい経験をしています。 Scalaで私のページをコード化し始めたばかりですが、これまでのところテストには優れています。 –

関連する問題