Heim  >  Artikel  >  Java  >  Aus welchen Gründen ist die SpringBoot @Autowired-Injektion leer?

Aus welchen Gründen ist die SpringBoot @Autowired-Injektion leer?

PHPz
PHPznach vorne
2023-05-14 18:40:153297Durchsuche

    Interpretation der Situation, in der die @Autowired-Injektion leer ist

    Aufgrund der jüngsten Begegnung in der Entwicklung bei der Verwendung der @Autowired-Annotation für die automatische Assemblierung wird ein Nullzeiger gemeldet und festgestellt, dass das Objekt nicht assembliert ist Durch Abfrage wurden mehrere Möglichkeiten zusammengefasst, was dies verursacht.

    1. Überprüfen Sie im einfachsten Fall die zusammengestellte Klasse, d.

    2. Überprüfen Sie, ob sich Ihre xxxxxApplication im Stammverzeichnis befindet, da Springboot standardmäßig das Verzeichnis unter der Startklasse scannt (ich erinnere mich, dass dies nur auf Versionen vor Springboot2.0.5 beschränkt ist, da die neue Version den Scanbereich über das angeben kann @ComponenScan-Annotation) .

    3. Spring-Annotationen wie @Service, @Componet, @Configuration und @Repository wurden beispielsweise nicht gescannt: Die Hauptklassen-Scanregeln von Springboot bedeuten, dass Sie Ihre Springboot-Startklasse xxxxxApplication überprüfen müssen sind Annotationen zur Startklasse. Die Annotation @ComponenScan wird hinzugefügt, um zu bestimmen, ob der Scanbereich angegeben ist.

    Zwei Annotationskonfigurationsmethoden, um mit Springboot das Scannen der Klassenkonfiguration zu starten:

    • 1, @Controller @EnableAutoConfiguration @ComponentScan.

    • 2. @SpringBootApplication

    4. Wenn die Ursache nicht gefunden wird, verwenden wir zunächst andere Methoden, um das Programm normal auszuführen und zu debuggen, und finden dann das Problem.

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

    Verwenden Sie @PostConstruct zum Initialisieren.

    5. Dieser Grund ist sehr wichtig und wird auch oft ignoriert. Der Anrufer kommt von neu. Wenn in Klasse A eine Mitgliedseigenschaft B vorhanden ist, B automatisch über @Autowired injiziert wird und die Instanz von Klasse A über new generiert wird, ist die automatische Injektion ungültig. Zu diesem Zeitpunkt werden alle Bean-Methoden über Spring abgerufen Kontext. Holen Sie sich B. Schauen Sie sich zu diesem Zeitpunkt die Klasse an, für die Sie einen Nullzeiger melden, um festzustellen, ob sie von new erstellt wurde. Wenn ja, können Sie ihn auch mit der Methode SpringUtil.getBean() ersetzen und es dann erneut versuchen.

    @Autowired injizierte Bean nicht gefunden Ausnahme

    Ausnahmebeschreibung

    ******************************
    ANWENDUNG FEHLGESCHLAGEN START
    ***************************

    Beschreibung:

    Feld clientAuthService in com.yinhai.mzgh.eurekaclient.feign.interceptor. Oauth3RequestInterceptor
    erforderte eine Bean vom Typ „com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService“, die nicht gefunden werden konnte.

    Der Injektionspunkt hat die folgenden Anmerkungen:
    - @org.springframework.beans.factory.annotation .Autowired (erforderlich=true)


    Aktion:

    Erwägen Sie die Definition einer Bean vom Typ „com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService“ in Ihrer Konfiguration.

    Ursache des Problems

    Dieses Problem ist ein Umweltproblem. In Profiles war es früher die Entwicklungsumgebung

    Aus welchen Gründen ist die SpringBoot @Autowired-Injektion leer?

    Das obige ist der detaillierte Inhalt vonAus welchen Gründen ist die SpringBoot @Autowired-Injektion leer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen