2010-12-28 8 views
3
@SpringBean 
PDLocalizerLogic loc; 

上記を使用すると、java.io.NotSerializableExceptionが返されます。これは、locが直列化できないためですが、Spring Beanは直列化可能なプロキシであるため、これは問題にはなりません。 私はwicket-springライブラリを使用しています。インジェクタSpringComponentInjectorとしてwrapInProxiesがデフォルトでtrueに設定されているので、プロキシを作成する必要がありますが、そうではありません。ページhttps://cwiki.apache.org/WICKET/spring.html#Spring-AnnotationbasedApproachWicket @SpringBeanはシリアライズ可能なプロキシを作成しません。

が書かれている:

を、アノテーションベースのアプローチを使用して、これは 自動的に処理されるよう が 注入された依存関係の程度 シリアライズ/デシリアライゼーションのを心配してはならない、 依存関係が表現されていますby シリアライズ可能なプロキシ

私は間違っていますか?

+0

+1これは私がwrapInProxiesが言及したことを聞いた最初の場所であり、私はそれを追いかけることができました(アプリケーションクラスを自分で書くことはできませんでした)、それはすべての問題を解決しました:) –

答えて

3

を参照してください?コンポーネントの初期化(すなわちコンポーネントとSpringComponentInjectorによって充填されている)

  • InjectorHolder.getInjectorを(使用して他のオブジェクト)を介し

    1. 。(これを)注入?

    ケース1と2は、改札スプリング統合を使用し、かつ改札プロキシでBeanをラップであろう(すなわち、このプロパティはSpring構成によって設定されているばね豆である)ばねによって直接注射

  • 直列化可能です。 ケース3は、折り返しを行わずに春に渡ったものだけを提供します。

  • +0

    Hmm ..クラスがwicketコンポーネントではないので、InjectorHolder.getInjector()。inject(this)を使用しているので、Beanは直列化可能でなければなりません。 – vinga

    +0

    次に、シリアライズできないことに違反していると確信していますか?これを引き起こしている他の何かがここにありますか? – Matt

    +0

    私はMockアプリケーション(wrapInProxiesがfalseに設定されている)に対して別の設定があることに気づいていませんでした。私はそれを変更し、すべてが期待どおりに動作します。お邪魔になってすみません! – vinga

    2

    まず、Beanが実際にプロキシされていることを確認します。デフォルトでは、springはプロキシを作成しません。

    次に、プロキシ戦略がproxy-target-class="true"であるかどうかを確認します。 false(afaik)の場合、オブジェクトへの参照はJDKプロキシの呼び出しハンドラに格納され、シリアル化しようとします。

    必要な場合は、クラスSerializableも作成する必要があります。

    +0

    この場合、実際にWicketはプロキシを作成する必要があります(コンクリートクラスのためのカバーの下にCGLibを使用し、インターフェースのために通常のJavaプロキシを使用します)。 – Eelco

    1

    は、インスタンスのリスナーがあなたのアプリケーションクラスに追加されていることを、あなたのダブルチェックすることができます:

    addComponentInstantiationListener(新しいSpringComponentInjector(この));

    また、これは任意のクラスではなく、Wicketコンポーネントのフィールドでのみ機能します。

    あなたは、Beanが注入されている方法を知っていますまた、wicket @SpringBean can not create bean

    関連する問題