2012-12-12 21 views
2

我在看這個例子:Building Applications in JavaFX 2.0他們顯示自定義SpringFxmlLoader: 爲什麼需要一個特定的春天FXML裝載機

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(); 
     } 
    } 
} 
}` 

爲什麼一個需要創建一個特定的春天FXML裝載機?我的意思是,即使使用簡單的fxml加載程序,當您加載如下所示的fxml時:

AnchorPane page = (AnchorPane) FXMLLoader.load(TabePaneGraph.class.getResource("Sample.fxml"));示例控制器被調用,任何初始化仍然完成。我想了解這個特定的自定義SpringFxmlLoader實現背後的動機。

回答

1

有多種方法對皮膚一隻貓。我猜在這篇文章中使用spring的動機是因爲許多Web開發人員會熟悉它。它也可能使它看起來更像Java EE應用程序的替代品。它是什麼,但不是因爲你可以用它彈簧。

你不需要任何依賴注入框架使用JavaFX來開發,實際上我們需要在我們的依賴仔細看,因爲它們會增加,如果你期待用戶下載你的應用程序下載時間。

1

有(至少)2種方式,如何指定控制器:

  • 聲明中FXML文件中的控制器類:請注意,您在此處指定 類而不是實例。 FXMLoader將創建一個新的 實例。
  • 通過現有的實例(例如,「這個」或這裏春天實例化一個bean)作爲控制器的FXMLLoader
loader.getNamespace().put("controller", instance); 

我不知道這部分,但我認爲它可以與setController()在最新的JavaFX版本替換。

相關問題