コンストラクターでの @Autowired Bean の割り当て
@Autowired Bean を使用するときに発生する一般的な問題は、 @Autowired Bean が、コンストラクタ。この記事では、この動作を調査し、それに対処する解決策を提供します。
提供されたコード スニペットでは、@Autowired Bean applicationProperties は、DocumentManager コンストラクターでアクセスすると null になりますが、他のメソッドで参照すると正しく初期化されます。この不一致は、Bean の初期化のライフサイクルが原因で発生します。
Bean の自動配線はオブジェクトの構築後に発生します。これは、コンストラクターが呼び出されたときにまだ値が割り当てられていないことを意味します。これを解決するには、初期化ロジックを @PostConstruct の注釈が付けられた別のメソッドに移動します。このアノテーションにより、Bean のインスタンス化と依存関係の注入後にメソッドが確実に呼び出され、自動配線された Bean に確実にアクセスできるようになります。
改訂されたコード スニペット
public class DocumentManager implements IDocumentManager { @Autowired private IApplicationProperties applicationProperties; public DocumentManager() { } @PostConstruct public void init() { startOOServer(); } private void startOOServer() { if (applicationProperties != null) { ... } } }
この変更により、初期化コードはオブジェクトの構築後に実行され、アプリケーションで必要なときに applicationProperties Bean が使用可能になるようにします。ドキュメントマネージャー。
以上が@Autowired Bean がコンストラクターでは null ですが、他のメソッドでは null にならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。