Heim >Java >javaLernprogramm >Aus welchen Gründen ist die SpringBoot @Autowired-Injektion leer?
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.
******************************
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.
Dieses Problem ist ein Umweltproblem. In Profiles war es früher die Entwicklungsumgebung
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!