Rumah  >  Artikel  >  Java  >  Apakah sebab mengapa suntikan SpringBoot @Autowired kosong?

Apakah sebab mengapa suntikan SpringBoot @Autowired kosong?

PHPz
PHPzke hadapan
2023-05-14 18:40:153297semak imbas

    Tafsiran situasi di mana suntikan @Autowired kosong

    Disebabkan pertemuan baru-baru ini dalam pembangunan apabila menggunakan anotasi @Autowired untuk pemasangan automatik, penunjuk nol akan dilaporkan Saya mendapati bahawa Objek tidak dipasang Melalui pertanyaan, beberapa kemungkinan sebab untuk situasi ini telah diringkaskan.

    1 Dalam kes yang paling mudah, semak kelas yang dipasang, iaitu, sama ada kelas di bawah anotasi @Autowired telah menambahkan anotasi dan menyerahkannya kepada SpringBoot untuk pengehosan, @service dan anotasi lain atau ditambahkan secara langsung. @Anotasi komponen.

    2. Semak sama ada xxxxxApplication anda berada dalam direktori akar, kerana springboot mengimbas direktori di bawah kelas permulaan secara lalai (saya ingat ini hanya terhad kepada versi sebelum Springboot2.0.5, kerana versi baharu boleh diberi penjelasan melalui @ComponenScan Tentukan julat imbasan).

    3. Anotasi musim bunga seperti @Service, @Componet, @Configuration dan @Repository belum diimbas Contohnya: peraturan pengimbasan kelas utama springboot bermakna anda perlu menyemak kelas permulaan Springboot anda. xxxxxApplication, dan semak permulaan Sama ada anotasi @ComponenScan ditambahkan pada anotasi pada kelas dan sama ada julat imbasan ditentukan.

    Dua kaedah konfigurasi anotasi menggunakan pengimbasan konfigurasi kelas permulaan springboot:

    • 1 @Controller @EnableAutoConfiguration @ComponentScan.

    • 2. @SpringBootApplication

    4 program berfungsi dahulu. Jalankan dan nyahpepijat seperti biasa, kemudian cari masalah kemudian.

    @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;        
    }

    Dimulakan menggunakan @PostConstruct.

    5 Sebab ini sangat penting dan juga merupakan faktor yang sering diabaikan. Pemanggil datang dari baru. Jika terdapat harta ahli B dalam kelas A, B disuntik secara automatik melalui @Autowired, dan instance kelas A dijana melalui baharu, maka suntikan automatik akan menjadi tidak sah Pada masa ini, semua kaedah Bean diperoleh melalui Spring konteks. Pada masa ini, lihat kelas yang anda laporkan penunjuk nol untuk melihat sama ada ia dicipta oleh baharu. Jika ya, anda juga boleh menggunakan kaedah SpringUtil.getBean() untuk menggantikannya, dan kemudian cuba lagi!

    @Kacang suntikan autowayar tidak dijumpai pengecualian

    Penerangan pengecualian

    ******************** **** ******
    PERMOHONAN GAGAL DIMULAKAN
    **************************** **

    Penerangan:

    Field clientAuthService dalam com.yinhai.mzgh.eurekaclient.feign.interceptor.Oauth3RequestInterceptor
    memerlukan kacang jenis 'com.yinhai.mzgh.eurekaclient .service.ClientAuthService' yang tidak ditemui.

    Titik suntikan mempunyai anotasi berikut:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


    Tindakan:

    Pertimbangkan untuk mentakrifkan kacang jenis 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' dalam konfigurasi anda.

    Punca berlakunya masalah

    Masalah ini Ia adalah masalah alam sekitar Sebelum ini adalah persekitaran dev dalam Profil

    Apakah sebab mengapa suntikan SpringBoot @Autowired kosong?

    .

    Atas ialah kandungan terperinci Apakah sebab mengapa suntikan SpringBoot @Autowired kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam