J'ai essayé de lier JavaFX et Spring Framework.

Je voulais une fonction de conteneur DI pour une application binaire (´ ・ ω ・ `)

Eh bien, ce que je voulais faire. @Autowired. Si vous l'utilisez, vous n'avez pas besoin d'en utiliser de nouveau et le design est rafraîchissant.

Il n'y a rien de tel que FXML et le contrôleur connecté comme les autres. Je l'ai fait simplement en déplaçant le conteneur DI ~

C'est pourquoi il est mis en œuvre

S'il s'agit d'une application GUI, il est nécessaire de charger explicitement la définition de Bean et d'exécuter Spring. Puis injectez le bean dans le programme Java en cours d'exécution.

  1. Exécutez Spring
  2. Injectez le grain.

Injectons des beans dans un programme JavaFX comme celui-ci.

Créez une classe qui s'injecte dans l'instance.

Tout d'abord, résumons les fonctions de fonctionnement de l'injection. C'est celui sur le net.

SpringInjector.java



@Scope(BeanDefinition.SCOPE_SINGLETON)
@Component
public class SpringInjector {
    
    @Autowired
    private AutowiredAnnotationBeanPostProcessor autowiredProcessor;
    
    @Resource
    private CommonAnnotationBeanPostProcessor commonProcessor;
    
    public void inject(final Object unmanagedBean) {
        
        // javax.*Injection d'annotations associées(@Resoure)
        commonProcessor.postProcessPropertyValues(null, null, unmanagedBean, unmanagedBean.getClass().getSimpleName());
        
        // @Autowire、@Injection d'annotation de valeur
        autowiredProcessor.processInjection(unmanagedBean);
    }
}

Le ** AnnotationBeanPostProcessor ** qui apparaît ici est Cela semble être une fonction qui injecte des beans dans une certaine classe. Wagwanny

Enregistrez cette classe en tant que bean!

application-config.xml


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
    
    
    <!-- Uncomment and add your base-package here:-->

    <context:annotation-config />
     <context:component-scan base-package="com.TsugaruInfo.*"></context:component-scan>
    
    <!--Enregistrement Spring Injector-->
    <bean id="springInjector" class="com.Tsugaruweb.springUtils.SpringInjector"/>
</beans>

Enregistrez l'annotation de package en tant que composant. Enregistrez le springInjector en tant que bean.

Activer Spring sur la classe de scène parent

Appelez ApplicationContext au printemps dans la classe parent. (On a l'impression que vous pouvez l'appeler depuis la console de la même manière)

Réalisez la gestion des haricots ici new ClassPathXmlApplicationContext("spring/application-config.xml"); Injecter l'injecteur à ressort du conteneur DI, Exécute la fonction d'injection Bean de SprinInjector.

AbstractWebAquaStage.java


public class AbstractWebAquaStage extends Stage {

    //Contexte de l'application Spring(static)
    public static ApplicationContext applicationContext;

	/**
	 *Activer le contexte d'application Spring et@Injecter automatiquement
	 */
	public void init() {
		applicationContext = new ClassPathXmlApplicationContext("spring/application-config.xml");
		SpringInjector si = applicationContext.getBean(SpringInjector.class);
		si.inject(this);
	}
	
	 public AbstractWebAquaStage() {
		this.init();
	    //Sortie vers la console pour vérification de fonctionnement
	    System.out.println("Une instance a été créée comme étape parente.");
	  }
}

Maintenant que nous l'avons configuré, déplaçons-le.

J'ai pu le mettre en place avec un bon feeling. C'est cool (comité pour appeler le programme cool) Héritons de cette classe parente Créons une scène avec une fonction d'injection d'annotations

TopStage.java


public class TopStage extends AbstractWebAquaStage {
	@Autowired
	ResourceLoader resource;
/**
 *Top stage
 */
	public TopStage(){
		
		//Volet racine
		Pane MainPane = null;
		try {
			MainPane = (Pane)FXMLLoader.load(resource.getResource("classpath:fxml/Tekito.fxml").getURL());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		Scene x_scene;
		x_scene = new Scene(MainPane);
		this.setScene(x_scene);

	}
}

Vous devriez déplacer cette étape pour la voir

AppMain.java


public class AppMain extends Application {

    //Contexte de l'application Spring(static)
    public static ApplicationContext applicationContext;
	@Override
	public void start(Stage stage) {
		stage = new TopStage();
		stage.show();
		
	}
	
	public static void main(String args[]) {
		launch();
	}
}

Courir

Voyons si ça marche

image.png

J'ai pu confirmer que cela fonctionnait correctement ヾ (.> ﹏ <.) ノ cool!

référence Ajouter Star pour l'injection Spring Bean dans le contrôleur JavaFX

Recommended Posts

J'ai essayé de lier JavaFX et Spring Framework.
J'ai essayé de lier grafana et postgres [docker-compose]
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
Je voulais faciliter la programmation JavaFX avec Spring Framework
[J'ai essayé] Tutoriel de printemps
J'ai essayé Spring Batch
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé de lire et de sortir CSV avec Outsystems
05. J'ai essayé de supprimer la source de Spring Boot
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé d'intégrer le bouton AWS I oT et Slack
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé la machine Spring State
J'ai essayé de vérifier yum-cron
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé de collecter et de résoudre les problèmes liés à la «classe» de Ruby.
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai essayé de lier le chat avec le serveur de Minecraft avec l'API Discord
J'ai essayé de résumer les applications et les outils de développement personnellement utiles (Apps)
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
Je suis allé au JJUG CCC 2019 Spring
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé le framework Java "Quarkus"
J'ai essayé GraphQL avec Spring Boot
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé Flyway avec Spring Boot
J'ai essayé de résumer Java 8 maintenant
C # (polymorphisme: polymorphisme)
J'ai essayé d'expliquer Active Hash
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)
J'ai essayé d'intégrer parfaitement Docker et Maven / Netbean en utilisant Jib
J'ai essayé de me connecter à MySQL en utilisant le modèle JDBC avec Spring MVC
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
Comment définir et utiliser un profil avec une configuration basée sur des annotations dans le framework Spring
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de résumer les méthodes utilisées
J'ai essayé de migrer le traitement vers VS Code
J'ai présenté WSL2 + Ubuntu à Window10 et essayé d'utiliser GDC, DMD, LDC
J'ai essayé de résumer les expressions Java lambda
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 2/3 (création de modèle de formulaire)
Modifications majeures liées au test Spring Framework 5.0
J'ai essayé de démarrer avec Web Assembly
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
J'ai essayé de résoudre la recherche binaire d'AOJ
J'ai essayé de créer mon propre guide de transfert en utilisant OpenTrip Planner et GTFS
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé de résumer l'API Stream
J'ai essayé Spring Data JDBC 1.0.0.BUILD-SNAPSHOT (-> 1.0.0.RELEASE)