ホームページ  >  記事  >  Java  >  SpringBoot @Autowired インジェクションが空である理由は何ですか?

SpringBoot @Autowired インジェクションが空である理由は何ですか?

PHPz
PHPz転載
2023-05-14 18:40:153297ブラウズ

    @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() メソッドを使用してそれを置き換えてから、再試行してください。

    @Autowired で注入された Bean が例外を見つけることができません

    例外の説明

    ******************** **** ********
    アプリケーションを開始できませんでした
    **************************** **

    # #説明:

    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 インジェクションが空である理由は何ですか?

    以上がSpringBoot @Autowired インジェクションが空である理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。