問題の説明
今日、インターセプターを使用しているときに、属性にインターセプターを挿入すると null になるという奇妙なエラーが発生しました。詳細は次のとおりです。実行中のコードでnull ポインター例外が発生します。つまり、挿入され
たGson は null です。この問題は非常に奇妙です。明らかに次のようになります。インターセプタは Spring 管理に引き渡されますが、インジェクションが失敗するのはなぜですか?
問題の原因
この問題は、Bean オブジェクトの作成が間違っていることが原因で、インターセプタを設定する際に次のように記述します。
new キーワードを使用してインターセプターを作成しました。その結果、オブジェクトは spring によって作成されず、もちろん、@Component が使用された場合でも、オブジェクトは spring によって管理されません。
問題が解決しました
解決策 1
newを使わずにインターセプターを作成し、以下の形式に変更します
Springで管理されているシングルトンオブジェクトを使用し、newオブジェクトを所有しなくなりました
解決策 2
コンストラクターによる属性の割り当て
新規作成時に使用する必要があるオブジェクトを渡します
要約する
Spring開発を使用する場合、Springコンテナのスコープに注意する必要があります。暇なときにSpringのソースコードにアクセスしてください。