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