ホームページ >Java >&#&チュートリアル >SpringBoot @Autowired インジェクションが空である理由は何ですか?
最近開発中に @Autowired アノテーションを使用して自動的にアセンブルするときに発生した問題により、null ポインターが報告されます。オブジェクトがアセンブルされていないことがわかりました。クエリを通じて、この状況の考えられる理由がいくつかまとめられました。
1. 最も単純なケースでは、アセンブルされたクラス、つまり、@Autowired アノテーションの下のクラスがアノテーションを追加して、それらをホスティング、@service、その他のアノテーションのために SpringBoot に渡したか、または直接追加されたかを確認します。 @Component アノテーション。
2. Springboot はデフォルトでスタートアップ クラスの下のディレクトリをスキャンするため、xxxxxApplication がルート ディレクトリにあるかどうかを確認します (新しいバージョンには注釈を付けることができるため、これは Springboot2.0.5 より前のバージョンにのみ限定されていたと記憶しています) @ComponenScan を通じてスキャン範囲を指定します)。
3. @Service、@Componet、@Configuration、@Repository などの Spring アノテーションはスキャンされませんでした。例: springboot のメイン クラス スキャン ルールは、Springboot スタートアップ クラス、xxxxxApplication、およびクラスのアノテーションに @ComponenScan アノテーションが付加されているか、スキャン範囲が指定されているかを起動を確認します。
スプリングブートを使用してクラス構成のスキャンを開始するための 2 つのアノテーション構成メソッド:
1、@Controller @EnableAutoConfiguration @ComponentScan。
2, @SpringBootApplication
4. 緊急の方法を使用します。原因が見つからない場合は、他の方法を使用して、プログラムが最初に動作します。通常どおりに実行してデバッグし、後で問題を探します。
@Autowired private SchedulerFactoryBean schedulerFactoryBean; private static QuartzManager quartzManager; /** * 通过@PostConstruct实现初始化bean之前进行的操作 * @desc 初始化操作,得到QuartzManager实例 * @Date 2019年1月7日 */ @PostConstruct public void init() { quartzManager = this; quartzManager.schedulerFactoryBean = this.schedulerFactoryBean; }
@PostConstruct を使用して初期化します。
5. この理由は非常に重要ですが、無視されがちな要素でもあります。電話の相手は新規からです。クラスAにメンバプロパティBがあり、Bが@Autowiredで自動インジェクションされ、クラスAのインスタンスがnewで生成される場合、自動インジェクションは無効となりますが、このときBeanメソッドはすべてSpring経由で取得されます。コンテキスト。B を取得します。この時点で、null ポインターを報告しているクラスを調べて、それが new によって作成されたかどうかを確認し、そうである場合は、SpringUtil.getBean() メソッドを使用してそれを置き換えてから、再試行してください。
原因問題この問題は環境の問題です。以前のプロファイルの開発環境でした******************** **** ********
# #説明:com.yinhai.mzgh.eurekaclient.feign.interceptor.Oauth3RequestInterceptor のフィールド clientAuthService
アプリケーションを開始できませんでした
**************************** **タイプ「com.yinhai.mzgh.eurekaclient.feign」の Bean が必要でした.service.ClientAuthService' が見つかりませんでした。
注入ポイントには次の注釈があります:- @org.springframework.beans.factory.annotation.Autowired(required=true)
アクション:
構成でタイプ「com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService」の Bean を定義することを検討してください。
以上がSpringBoot @Autowired インジェクションが空である理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。