1

Spring 3では、静的フィールドまたはメソッドのいずれかに@Autowiredを設定することはできないため、次のようなユーティリティクラスを宣言する必要があります。

public class SchoolYearServiceUtil {
    private static SchoolYearService schoolYearService;

    public static SchoolYear getSchoolYear(Long id) {
        return schoolYearService.get(id);
    }
}

必要な場所(jsp、コマンドクラス...)にschoolYearServiceを挿入する必要がないようにします。この場合、SchoolYearServiceUtilによって実装されるインターフェイスは必要ありません。

コードを使用してオブジェクトを初期化する必要はありませんが、Springのものと同じインスタンスを取得します。

getSchoolYearを静的メソッドとして実装するのに最適なオプションはどれですか?

ありがとう。

これは概念的に間違っているでしょうか?:

@Component
public class SchoolYearServiceUtil {

private static SchoolYearService schoolYearService;

@Autowired(required = true)
private SchoolYearServiceUtil(@Qualifier("schoolYearServiceImpl") SchoolYearService schoolYearService) {
    SchoolYearServiceUtil.schoolYearService = schoolYearService;
}

public static SchoolYearService getSchoolYearService() {
    return schoolYearService;
}

public static SchoolYear getSchoolYear(Long id) {

    return getSchoolYearService().get(id);
}
}

コンストラクターが呼び出された後はSpringのみが呼び出され、コンストラクターが他の場所で呼び出されないようにする必要があります。そのため、コンストラクターをプライベートとして宣言しました。

4

1 に答える 1

1

私はスカフマンのコメントを完全に支持します。staticDI のあるフィールドは必要ありません。スコープ シングルトン (デフォルト) の Bean を定義するだけです。

Bean を静的に取得する方法もありますが、通常の状況では使用しないことに注意してください。(有効なアプリケーションがいくつかあります)。を使用することです。WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)

ServletContext引数を渡す必要があることに気付きました。

于 2010-12-14T17:21:24.707 に答える