質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

28995閲覧

springでstaticなメンバ変数へDIするとNullPointerExceptionが発生

take-chan

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

1グッド

0クリップ

投稿2016/05/18 02:16

Java、Springを使用して、
日付に関連するユーティリティーを開発しています。
コードは以下の通りです。

staticなメソッドにてDIしたServiceを利用したいのですが、
getSagyoCalendar.resetを呼び出したタイミングで
NullPointerExceptionが発生します。
(sagyoCalendarSearchServiceがNULLとなっている)

getSagyoDateはstaticメソッドとして呼び出すことができて
且つNullPointerExceptionにならずにServiceをDIする方法はあれば、
ご教示頂きたくお願い致します。

**************************************

public final class Util {

/** * {@link Util}のインスタンスを生成します。 */ public Util() { } @Autowired static SagyoCalendarSearchService sagyoCalendarSearchService; /* */ public static Date getSagyoDate(Date targetDate) { Date result = getSagyoCalendar(targetDate) /* * resultを使用して色々と処理する */ return result; } /** * 作業カレンダーを取得します。 * * @param targetDate * @return ある計算を行って算出した日付 */ private static Date getSagyoCalendar(Date targetDate) { sagyoCalendarSearchService.reset() sagyoCalendarSearchService.setparam1(targetDate) return sagyoCalendarSearchService.execute() }

}

**************************************

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@Autowiredで取得するインスタンスを、staticメソッドで使う場合は、次のようにします。

java

1import org.springframework.beans.factory.annotation.Autowired; 2import org.springframework.stereotype.Component; 3 4import javax.annotation.PostConstruct; 5 6@Component 7public class SampleUtil { 8 9 static SampleMessage message; 10 11 @Autowired 12 private SampleMessage wiredMessage; 13 14 @PostConstruct 15 private void start() { 16 SampleUtil.message = wiredMessage; 17 } 18 19 public static String getMessage() { 20 return message.getMessage(); 21 } 22}

ただしこの方法を取るよりも、きちんとSpringのスコープ(Singletonやprototypeなど)を定義してstaticを用いず適宜取得した方が良いでしょう。

投稿2016/05/18 09:50

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take-chan

2016/05/19 01:14

回答頂きましてありがとうございました。 早速試してみたのですが、 やはり同じ個所でNullPointarExceptionが発生します。 ご指摘の通り、staticを用いず適宜取得する方向で考えておりますが、 なぜNullになってしまうか気がかりです。。。 public final class Util { /** * {@link Util}のインスタンスを生成します。 */ public Util() { } private SagyoCalendarSearchService sagyoCalendarSearchService; @Autowired private static SagyoCalendarSearchService wiredSagyoCalendarSearchService; @PostConstruct private void start() { Util.sagyoCalendarSearchService = wiredSagyoCalendarSearchService; } public static Date getSagyoDate(Date targetDate) { Date result = getSagyoCalendar(targetDate) /* * resultを使用して色々と処理する */ return result; } /** * 作業カレンダーを取得します。 * * @param targetDate * @return ある計算を行って算出した日付 */ private static Date getSagyoCalendar(Date targetDate) { sagyoCalendarSearchService.reset() sagyoCalendarSearchService.setparam1(targetDate) return sagyoCalendarSearchService.execute() } } **************************************
A-pZ

2016/05/19 01:40 編集

このUtilクラスがSpring管理にない場合は、@Autowiredは効果がありません。Springの設定ファイルにてbean定義ないしはComponentScanの対象に入れるか、SpringBootでしたら、起動クラスにて@Beanの定義が必要です。
take-chan

2016/05/19 05:44

回答頂きましてありがとうございました。 ご指摘頂いた通りで、Utilクラス自体がSpring管理にいないことが原因でした。 お蔭様で無事解決することができました。ありがとうございました。
A-pZ

2016/05/19 08:04

d(・ω・ よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問