2

私はこの例を見ています:JavaFX 2.0でアプリケーションを構築すると、カスタムのSpringFxmlLoaderが表示されます。

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実装の背後にある動機を理解しようとしています。

4

2 に答える 2

1

(少なくとも)2つの方法があります。コントローラーを指定する方法は次のとおりです。

  • FXMLファイルでコントローラークラスを宣言します。ここではインスタンスではなくクラスを指定することに注意してください。FXMLoaderは新しいインスタンスを作成します。
  • 既存のインスタンス(たとえば、「this」またはここではSpringでインスタンス化されたBean)をコントローラーとしてFXMLLoaderに渡します。
loader.getNamespace().put("controller", instance);

この部分についてはよくわかりませんがsetController()、最新のJavaFXバージョンで置き換えることができると思います。

于 2012-12-12T15:56:27.710 に答える
1

猫の皮を剥ぐ方法は複数あります。その記事で春を使う動機は、多くのWeb開発者がそれに精通しているからだと思います。また、JavaEEアプリケーションの代替のように見える場合もあります。それはそれですが、それで春を使うことができるからではありません。

JavaFXで開発するために依存性注入フレームワークは必要ありません。実際、ユーザーがアプリケーションをダウンロードすることを期待している場合、依存性がダウンロード時間を増やすため、依存性を注意深く調べる必要があります。

于 2012-12-12T21:57:22.720 に答える