Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.

Ich wollte eine DI-Container-Funktion für eine binäre Anwendung (´ ・ ω ・ `)

Nun, was ich tun wollte. @Autowired. Wenn Sie es verwenden, müssen Sie kein neues verwenden, und das Design wird aktualisiert.

Es gibt keine FXML und den Controller, die wie andere Personen verbunden sind. Ich habe es nur durch Bewegen des DI-Containers ~ gemacht

Deshalb wird es implementiert

Wenn es sich um eine GUI-Anwendung handelt, muss die Bean-Definition explizit geladen und Spring ausgeführt werden. Fügen Sie dann die Bean in das laufende Java-Programm ein.

  1. Führen Sie Spring aus
  2. Injizieren Sie die Bohne.

Lassen Sie uns Beans in ein JavaFX-Programm wie dieses einfügen.

Erstellen Sie eine Klasse, die in die Instanz eingefügt wird.

Lassen Sie uns zunächst die Funktionen für den Betrieb der Einspritzung zusammenfassen. Dies ist der im Netz.

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.*Einfügen verwandter Anmerkungen(@Resoure)
        commonProcessor.postProcessPropertyValues(null, null, unmanagedBean, unmanagedBean.getClass().getSimpleName());
        
        // @Autowire、@Wertanmerkungsinjektion
        autowiredProcessor.processInjection(unmanagedBean);
    }
}

Der hier angezeigte ** AnnotationBeanPostProcessor ** ist Es scheint eine Funktion zu sein, die Bohnen in eine bestimmte Klasse injiziert. Wagwanny

Registrieren Sie diese Klasse als Bohne!

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>
    
    <!--Registrierung des Federinjektors-->
    <bean id="springInjector" class="com.Tsugaruweb.springUtils.SpringInjector"/>
</beans>

Registrieren Sie die Paketanmerkung als Komponente. Registrieren Sie den springInjector als Bean.

Aktivieren Sie Spring in der übergeordneten Bühnenklasse

Rufen Sie ApplicationContext in Spring in der übergeordneten Klasse auf. (Es fühlt sich an, als könnten Sie es auf die gleiche Weise von der Konsole aus aufrufen.)

Verwirklichen Sie hier das Bohnenmanagement new ClassPathXmlApplicationContext("spring/application-config.xml"); Federinjektor aus DI-Behälter einspritzen, Führt die Bean-Injektionsfunktion von SprinInjector aus.

AbstractWebAquaStage.java


public class AbstractWebAquaStage extends Stage {

    //Frühlingsanwendung Kontext(static)
    public static ApplicationContext applicationContext;

	/**
	 *Aktivieren Sie den Spring-Anwendungskontext und@Autowired injizieren
	 */
	public void init() {
		applicationContext = new ClassPathXmlApplicationContext("spring/application-config.xml");
		SpringInjector si = applicationContext.getBean(SpringInjector.class);
		si.inject(this);
	}
	
	 public AbstractWebAquaStage() {
		this.init();
	    //Ausgabe an die Konsole zur Funktionsprüfung
	    System.out.println("Eine Instanz wurde als übergeordnete Stufe erstellt.");
	  }
}

Nachdem wir es eingerichtet haben, können wir es tatsächlich verschieben.

Ich konnte es mit einem guten Gefühl einrichten. Es ist cool (Komitee nennt das Programm cool) Lassen Sie uns diese übergeordnete Klasse erben Lassen Sie uns eine Stufe mit Anmerkungsinjektionsfunktion erstellen

TopStage.java


public class TopStage extends AbstractWebAquaStage {
	@Autowired
	ResourceLoader resource;
/**
 *Oberste Bühne
 */
	public TopStage(){
		
		//Wurzelfenster
		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);

	}
}

Sie sollten diese Stufe verschieben, um sie zu sehen

AppMain.java


public class AppMain extends Application {

    //Frühlingsanwendung Kontext(static)
    public static ApplicationContext applicationContext;
	@Override
	public void start(Stage stage) {
		stage = new TopStage();
		stage.show();
		
	}
	
	public static void main(String args[]) {
		launch();
	}
}

Lauf

Mal sehen, ob es funktioniert

image.png

Ich konnte bestätigen, dass es richtig funktioniert ヾ (.> ﹏ <.) ノ cool!

Referenz Stern für Spring Bean-Injektion in JavaFX Controller hinzufügen

Recommended Posts

Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Ich wollte die JavaFX-Programmierung mit dem Spring Framework vereinfachen
[Ich habe es versucht] Spring Tutorial
Ich habe Spring Batch ausprobiert
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, AWS I oT Button und Slack zu integrieren
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Ich habe Spring State Machine ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Ich habe versucht, Rubys "Klassen" -Probleme zu sammeln und zu lösen.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen
Ich habe versucht, den Chat mit dem Minecraft-Server mit der Discord-API zu verknüpfen
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Apps) zusammenzufassen.
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich ging zum JJUG CCC 2019 Spring
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Methode zu erklären
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe jetzt versucht, Java 8 zusammenzufassen
C # (Polymorphismus: Polymorphismus)
Ich habe versucht, Active Hash zu erklären
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Ich habe versucht, Docker und Maven / Netbean mit Jib gut zu integrieren
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
So legen Sie ein Profil mit annotationsbasierter Konfiguration im Spring-Framework fest und verwenden es
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe WSL2 + Ubuntu in Window10 eingeführt und versucht, GDC, DMD, LDC zu verwenden
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 2/3 (Formularvorlagenerstellung) zu drucken.
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Ich habe versucht, AOJs binäre Suche zu lösen
Ich habe versucht, mit OpenTrip Planner und GTFS eine eigene Übertragungsanleitung zu erstellen
Ich habe einen Arbitrage-Transaktionsbot für virtuelle Währungen erstellt und versucht, Geld zu verdienen
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe Spring Data JDBC 1.0.0.BUILD-SNAPSHOT ausprobiert (-> 1.0.0.RELEASE)