2012-12-12 5 views
2

Je regarde cet exemple: Building Applications in JavaFX 2.0 et ils montrent un SpringFxmlLoader personnalisé: Pourquoi la nécessité d'un ressort FXML spécifique Loader

import java.io.IOException; 
import java.io.InputStream; 
import javafx.fxml.FXMLLoader; 
import org.springframework.context.ApplicationContext; 
public class SpringFxmlLoader 
{ 
private ApplicationContext context; 

public SpringFxmlLoader(ApplicationContext context) 
{ 
    this.context = context; 
} 

public Object load(String url, Class<?> controllerClass) throws IOException 
{ 
    InputStream fxmlStream = null; 
    try 
    { 
     fxmlStream = controllerClass.getResourceAsStream(url); 
     Object instance = context.getBean(controllerClass); 
     FXMLLoader loader = new FXMLLoader(); 
     loader.getNamespace().put("controller", instance); 
     return loader.load(fxmlStream); 
    } 
    finally 
    { 
     if (fxmlStream != null) 
     { 
      fxmlStream.close(); 
     } 
    } 
} 
}` 

Pourquoi un besoin de créer un ressort spécifique FXML Loader? Je veux dire, même avec un chargeur fxml simple, quand vous chargez un fxml comme ceci:

AnchorPane page = (AnchorPane) FXMLLoader.load(TabePaneGraph.class.getResource("Sample.fxml")); le contrôleur d'échantillon est appelé de toute façon et toute initialisation est encore fait. J'essaie de comprendre la motivation derrière cette implémentation personnalisée de SpringFxmlLoader.

Répondre

1

Il existe plusieurs façons de peler un chat. Je suppose que la motivation pour utiliser le printemps dans cet article est parce que de nombreux développeurs Web le connaissent. Cela pourrait également faire ressembler cela à une alternative à une application Java EE. Ce qui est, mais pas parce que vous pouvez utiliser le printemps avec elle. Vous n'avez pas besoin de framework d'injection de dépendance pour développer avec JavaFX, en fait nous devons examiner attentivement nos dépendances car elles ajouteront au temps de téléchargement si vous attendez que les utilisateurs téléchargent votre application.

1

Il y a (au moins) 2 façons, comment spécifier un contrôleur:

  • déclarer la classe de contrôleur dans le fichier FXML: notez que vous spécifiez la classe ne l'instance ici. Le FXMLoader créera une nouvelle instance .
  • passer une instance existante (par exemple, « ceci » ou comme ici un haricot instancié avec le printemps) comme contrôleur au FXMLLoader
loader.getNamespace().put("controller", instance); 

Je ne suis pas sûr de cette partie, mais Je pense qu'il peut être remplacé par setController() dans la dernière version de JavaFX.

Questions connexes