3

リクエスト スコープの Bean があり、HttpServletResponse および HttpServletRequest オブジェクトにアクセスする必要があります。

コンストラクターでこれらのオブジェクトにアクセスする必要があるため、プロパティの自動配線はオプションではありません。

私は次のことをしました:

@Component
@Scope("request")
public class MyClass{

    @Autowired(required=true)
    public MyClass(HttpServletRequest request, HttpServletResponse response) {

        // do stuff I need to do in the constructor

    }
}

これにより、次のエラーが表示されます。

デフォルトのコンストラクターが見つかりません。ネストされた例外は java.lang.NoSuchMethodException: com.foo.bar.MyClass.() です

このエラー メッセージによると、存在しないパラメーターのない既定のコンストラクターを探しています。コンストラクターを自動配線し、特に「必須」をtrueに設定したため、インジェクターはこのコンストラクターを選択する必要があります。Bean はリクエスト スコープであるため、これは機能するはずですが、機能しません。

何か案は?

4

2 に答える 2

3

@Aravind が述べたようにHttpServletResponse、autowire 候補としては利用できません。ただし、 を使用してレスポンスにアクセスできServletWebRequest.getResponse()ServletWebRequest( Spring 固有のクラス)オートワイヤー候補として使用できます。

そうは言っても、コンストラクターでは機能しない可能性がありますが、とにかく試してみてください:)

于 2012-01-17T08:01:39.433 に答える
3

私が理解している限りでは、標準的なアプローチを使用して HttpServletResponse オブジェクトを自動接続することはできません。WebApplicationContextUtils クラスの registerWebApplicationScopes メソッドを確認してください。解決可能な依存関係は、 HttpSession.class および HttpSession.class のみです。

ここでカスタム ソリューションを確認してください。

于 2012-01-17T05:54:30.100 に答える