この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 25865|答える: 0

[出典] Spring Bootは設定ファイルの値を読み取る(application.yml)

[リンクをコピー]
掲載地 2019/01/07 15:37:14 | | | |
最初のapplication.yml構成プロファイルは以下の通りです。



Mavenプロジェクトpom.xmlパッケージを追加:




以下のコードで新しいマッピングオブジェクトを作成します:

文字列型はプロパティ値を受け取るためにセッターを必要とします。 マップ、コレクション、配列は必須ではありません

@Autowired注釈を使って自動的に注入します。以下の画像に示されています:



esConfigは常にnullを出力します。長い間解決策を探しましたが失敗しました。以下に解決策があります。

新しいコントローラーを作成しましょう。コードは以下の通りです:

注入は成功し、yml設定ファイルの値は通常通り次のように得られます。



EsClientが成功裏に注入できない理由は以下の通りです:

このクラスの関数をコンストラクタで呼び出し、そのクラスの@Autowiredの変数がこの関数で使われます。

だから、うまくいかないかもしれないと思ったのです。 なぜなら@Autowired外部参照からクラスを構成する前に待たなければならないからです。 したがって、@Autowiredの注入時間はコンストラクタの実行時間より遅くなければなりません。
解決:

Spring Teamは「豆には必ずコンストラクターベースの依存注入を使え。 必須依存関係には必ずアサーションを使用」と述べています。

翻訳:

スプリングは「必ずインゲンにコンストラクターを含んで依存注入を確立しなさい」と提案しています。 「依存関係を強制するために常にアサーションを使え」と述べています。


原文:

修正された書き方:



追伸:Java変数の初期化順序は、静的変数または静的文ブロック – >インスタンス変数または初期化文ブロック – >構築メソッド – >@Autowired

では、なぜメンバー変数に最終型を追加するのでしょうか?

インターネット上には次のような説明があります:スプリング構成のデフォルトビーンの範囲はシングルトンであり、起動後も常に存在します。 ビーンのオブジェクトを動的に作成すると宣言し、スコーププロパティをプロトタイプに設定します。 しかし、サービス自体がシングルトンの場合、インジェクションは一度だけ実行されます。

@Autowired自体はシングルトンモードであり、プログラム起動時に一度だけ実行され、最終モードを定義していなくても二度目の初期化はしないため、この最終モードは意味を持ちません。

これは、プログラムが実行中にコンストラクタが再び実行されるのを防ぐためかもしれません。

あるいは、Finalはプログラム開始時に一度しか初期化しないという意味で理解しやすいのかもしれません。






先の:Spring Boot+mavenでプロジェクトを迅速に構築できます
次に:2018年中国インターネット記念品公開
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com