Heim >Java >javaLernprogramm >Wie kann ich Spring-Abhängigkeiten (wie JPA-Repositorys) in JavaFX-Lebenszyklusmethoden einfügen?

Wie kann ich Spring-Abhängigkeiten (wie JPA-Repositorys) in JavaFX-Lebenszyklusmethoden einfügen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 09:40:291053Durchsuche

How can I inject Spring dependencies (like JPA repositories) into JavaFX lifecycle methods?

Hinzufügen von Spring Dependency Injection zu JavaFX: JPA Repository and Services

Das Problem

JavaFX-Anwendungen haben vordefinierte Lebenszyklus-Hooks (init(), start( ) und stop()) zum Verwalten von Anwendungsinitialisierungs- und Lebenszyklusereignissen. Das direkte Einfügen von Spring-Abhängigkeiten (z. B. JPA-Repositorys) in diese Methoden funktioniert jedoch möglicherweise nicht. Dies liegt daran, dass JavaFX seine Lebenszyklusmethoden vom Spring-Anwendungskontext isoliert.

Abhängigkeitsinjektionsoptionen

Option 1: Verwenden Sie eine Spring Boot-Anwendung

Überlegen Sie Konvertieren Ihrer JavaFX-Anwendung in eine Spring Boot-Anwendung. Dies ermöglicht eine vollständige Integration mit dem Spring-Framework, einschließlich Abhängigkeitsinjektion, JPA-Repositorys und anderen Spring-Funktionen.

Option 2: Manuelle Abhängigkeitsinjektion

1. Integration über JavaFXMLLoader

Verwenden Sie die setControllerFactory-Methode auf FXMLLoader, damit Spring FXML-Controller instanziieren und Spring-Abhängigkeiten einfügen kann:

<code class="java">fxmlLoader.setControllerFactory(springContext::getBean);</code>

Annotieren Sie Ihre JavaFX-Controller mit @Component und @Autowired Spring Anmerkungen zum Empfangen von Abhängigkeiten:

<code class="java">@Component
@Scope("prototype")
public class DemoController {

    @FXML
    private Label usernameLabel;

    @Autowired
    public SpringService mySpringService;

    ...
}</code>

2. Injizieren in die JavaFX-Anwendungsklasse

Wenn Sie Spring Beans in die JavaFX-Anwendungsklasse injizieren möchten:

<code class="java">springContext
    .getAutowireCapableBeanFactory()
    .autowireBeanProperties(
        this,
        AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,
        true
    );</code>

Trennung von Belangen

Um die Trennung von Belangen aufrechtzuerhalten , wird empfohlen, die Spring Boot-Anwendung von der JavaFX-Anwendung zu trennen. Führen Sie die Spring Boot-Anwendung aus, um den Spring-Kontext zu initialisieren und an die JavaFX-Anwendung zu übergeben.

Übergabe von Befehlszeilenargumenten von JavaFX an SpringBoot

Verwenden Sie getParameters().getRaw().toArray( neue String[0])-Methode zum Übergeben von Argumenten von JavaFX an Spring Boot.

Zusätzliche Hinweise

  • Die @Controller-Annotation kann für JavaFX-Controller verwendet werden, es wird jedoch empfohlen, @ zu verwenden Komponente zur klareren Trennung von Belangen.
  • @Scope("prototype") wird verwendet, um für jedes FXML-Ansichtsobjekt eine neue Controller-Instanz zu erstellen.
  • Detailliertere Informationen finden Sie unter den bereitgestellten Links im Antwortfeld.

Das obige ist der detaillierte Inhalt vonWie kann ich Spring-Abhängigkeiten (wie JPA-Repositorys) in JavaFX-Lebenszyklusmethoden einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn