Verständnis Spring Boot @Autowired
Ich verstehe nicht, wie spring Stiefel annotation @Autowired
richtig funktioniert. Hier ist ein einfaches Beispiel:
@SpringBootApplication
public class App {
@Autowired
public Starter starter;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
public App() {
System.out.println("init App");
//starter.init();
}
}
--
@Repository
public class Starter {
public Starter() {System.out.println("init Starter");}
public void init() { System.out.println("call init"); }
}
Wenn ich diesen code ausführen, bekomme ich die logs init App
und init Starter
, so den Frühling erstellen dieser Objekte. Aber wenn ich rufe die init-methode von Starter
im App
bekomme ich NullPointerException
. Gibt es noch mehr, ich muss dann mithilfe der annotation @Autowired
init mein Objekt?
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'app': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [{package}.App$$EnhancerBySpringCGLIB$$87a7ccf]: Constructor threw exception; nested exception is java.lang.NullPointerException
- Je nach Umfang Ihrer Bohne, weil eine Spring-Boot-app ist so vorkonfiguriert, verwenden Sie den Paket-Scannen, wird der Frühling erstellen Sie eine Instanz der bean, die Sie verwenden möchten. Aber, nur weil es erstellt wurde, bedeutet nicht unbedingt, dass es gespritzt wurden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Aufruf der
init
- Methode aus dem Konstruktor der KlasseApp
, der Frühling hat noch nicht autowired die Abhängigkeiten in derApp
Objekt. Wenn Sie wollen, rufen Sie diese Methode auf, nachdem der Frühling ist die Erstellung abgeschlossen und autowiring dieApp
Gegenstand, dann fügen Sie eine Methode mit einem@PostConstruct
Anmerkung, dies zu tun, zum Beispiel: