Maison  >  Article  >  Java  >  Comment puis-je injecter des dépendances Spring (comme les référentiels JPA) dans les méthodes de cycle de vie JavaFX ?

Comment puis-je injecter des dépendances Spring (comme les référentiels JPA) dans les méthodes de cycle de vie JavaFX ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 09:40:291016parcourir

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

Ajout de l'injection de dépendances Spring à JavaFX : référentiel et services JPA

Le problème

Les applications JavaFX ont des hooks de cycle de vie prédéfinis (init(), start( ), et stop()) pour gérer l'initialisation des applications et les événements du cycle de vie. Cependant, l'injection de dépendances Spring (telles que les référentiels JPA) directement dans ces méthodes peut ne pas fonctionner. En effet, JavaFX isole ses méthodes de cycle de vie du contexte de l'application Spring.

Options d'injection de dépendances

Option 1 : Utiliser une application Spring Boot

Envisagez convertir votre application JavaFX en application Spring Boot. Cela fournit une intégration complète avec le framework Spring, y compris l'injection de dépendances, les référentiels JPA et d'autres fonctionnalités Spring.

Option 2 : Injection manuelle de dépendances

1. Intégration via JavaFXMLLoader

Utilisez la méthode setControllerFactory sur FXMLLoader pour permettre à Spring d'instancier les contrôleurs FXML et d'injecter des dépendances Spring :

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

Annotez vos contrôleurs JavaFX avec @Component et @Autowired Spring annotations à recevoir dépendances :

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

    @FXML
    private Label usernameLabel;

    @Autowired
    public SpringService mySpringService;

    ...
}</code>

2. Injection dans la classe d'application JavaFX

Si vous souhaitez injecter des beans Spring dans la classe d'application JavaFX :

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

Séparation des préoccupations

Pour maintenir la séparation des préoccupations , il est recommandé de séparer l'application Spring Boot de l'application JavaFX. Exécutez l'application Spring Boot pour initialiser le contexte Spring et transmettez-le à l'application JavaFX.

Passer des arguments de ligne de commande de JavaFX à SpringBoot

Utilisez getParameters().getRaw().toArray( nouvelle méthode String[0]) pour transmettre les arguments de JavaFX à Spring Boot.

Supplémentaire Notes

  • L'annotation @Controller peut être utilisée pour les contrôleurs JavaFX, mais il est recommandé d'utiliser @Component pour une séparation plus claire des problèmes.
  • @Scope("prototype") est utilisé pour créez une nouvelle instance de contrôleur pour chaque objet de vue FXML.
  • Pour des informations plus détaillées, reportez-vous aux liens fournis dans la réponse boîte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn