2017-12-19 49 views
2

スプリング5がサポートを追加しました。スプリングAPIのヌルセーフティをサポートしました。現在、任意の注入点を示すために@Nullableを使用することもできます。スプリング5:@Nullableを使用するオプションの注入ポイント

しかし、@Nullable依存関係を使用する必要がある場合、ユースケースを理解できません。

春のドキュメントは

@Component 
    public class SomeClass { 

     @Nullable 
     @Autowired 
     private MyService service; 

     public void someMethod() 
     { 
      service.someMethod();  
     } 

    } 
+0

ここでそれについていくつかの情報がhttps://jira.spring.io/browseです/ SPR-15540 – pvpkiran

答えて

3

今、我々はまた、オプションの注入点を示すために@Nullableを使用することができます@Nullable依存関係についての例を持っていません。

依存関係が必須ではないと思います。

@Autowired(required = false) 
private MyService service; 

今、このコードで:あなたは@Nullableずに書くことができる何

@Nullable 
@Autowired 
private MyService service; 

あなたはフィールドがnullであり得ることを伝えるために標準的な方法を使用することができます。
そしてjavadocによると、標準的な方法は、この注釈をサポートするツールを利用することができます:

はJSR 305をサポートして 一般的なツールにJavaでNULL値を許可するかどうかを示すために、JSR 305のメタアノテーションの活用とによって使用されますKotlinは Spring APIのnull可能性を推論する。

依存関係には@Nullableがあります。 javadoc
、あなたも読むことができます:

注釈付き要素はいくつかの状況下 nullになることを宣言するための一般的な春の注釈を。

とも:

は、パラメータ、戻り値、およびフィールドレベルで使用されるべきです。メソッド は、 の動作が異なる場合を除き、親の@Nullableアノテーションを繰り返す必要があります。

だから、それはメソッドの戻り値を飾るためにも理にかなって:

@Nullable 
public Foo doThat() { 
    ... 
} 

またはパラメータ:

public Foo doThat(@Nullable Bar) { 
    ... 
} 
+0

詳細についてはDavidに感謝します。 required = falseが必要なシナリオを共有してください。私はそれがコードのにおいとして考慮することができると思うし、クラスをリファクタリングする必要があります – Niraj

+0

あなたは大歓迎です。'@ Nullable'を追加すると、一般的に' null 'というものを持つのは悪い考えです:フィールド、パラメータなど... 非常に特殊なケースでは、 'null'フィールドを持つことができます。アプリケーションがサードパーティのJARに依存して、Springコンテナ内で特定のBeanを検出してロードするとします。状況によっては、Beanの実装を解決できない場合があります。あなたのフィールドに 'required = false'とPostConstructフックにあるフォールバック戦略を使うことで、この問題を回復できます。 – davidxxx

関連する問題