2016-07-20 4 views
0

私はwicketのAuthenticatedWebSessionを継承するクラスでSpring Beanを開始しようとしています。wicketのAuthenticatedWebSessionでSpring Beanを開始

stakcoverflowにはいくつかの回答がありますが、それらは私のためには機能しませんでした。

public class AuthWebSession extends AuthenticatedWebSession { 
    @SpringBean(name = "authenticationService") 
    private AuthenticationService authenticationService; 

    public AuthWebSession(Request request) { 
     super(request); 
     Injector.get().inject(this); 
    } 

    @Override 
    protected boolean authenticate(String username, String password) { 
     //authenticationService is null here as the spring bean did not initiate 
     authenticationService.auth(username, password); 
    } 

    ... 
} 

authenticationServiceは、春のBeanが開始されていないため、nullのままです。 wicketバージョン7.3.0を使用

どのように正しく注入するにはどのようなアイデア?

+0

スキャンするパッケージを有効にして、xmlファイルに ''が含まれていますか? – VinayVeluri

+0

Beanは 'extends Base'クラスにインクルードしたときに見つかるので、問題はコンポーネントスキャンではないはずですか? – Noripsni

答えて

1

これは正しい方法です。 Injector.get().inject(this);が実行された後、Beanはnullでなくてはなりません。

私は現在のアプリケーションで同じものを使用しています。再び7.3.0。ここで

は、いくつかの提案は以下のとおりです。

  • は、あなたのテストはYourWicketApplicationを使用するか、彼らはモックアプリケーションを使用する場合は、その後SpringComponentInjectorを設定することを確認していることを確認してください。

  • Spring5もその名前の注釈を追加したので、@SpringBeanがWicket-Springのものであることを確認してください。私はあなたがまだSpring 5のスナップショットを使用しているかどうかは疑問ですが。

問題を再現するミニデモアプリケーションを作成してください。デバッグに役立ててください!

+0

Beanは正しいものでなければなりません 'import org.apache.wicket.spring.injection.annot.SpringBean;' – Noripsni

+0

そうですね。それはヌルでなければならない、そして、それは...私は単体テストを介してそれを開始していたが、桟橋で走っているときはうまく動作する。しかし、私がユニットテストでもうまく動作するためには、まだ問題は残っています。 – Noripsni

+0

テストにSpringComponentInjectorが設定されていることを確認してください。おそらくWicketTesterは別のアプリケーションインスタンスを使用します。実行時に使用するものではなく、MockApplicationです。 –

関連する問題