3

CDI (weld-se 2) と JavaFX を組み合わせようとしています。このクラスの作成がファクトリ メソッドを使用して管理されるように、コントローラー クラスにカスタム作成の注釈を付けたいと考えています。以下のようになるはずですが、このコードは機能していません。何を変更すべきかアドバイスいただけますか?

注釈:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE })
@Qualifier
public @interface FXMLManaged {
}

工場クラス:

public class FXMLManagedProducer {
    @Produces @FXMLManaged
    public <T> T getFXMLManagedInstance(Class<T> type) {
        return type.newInstance();
    }
}

コントローラ クラス:

@FXMLManaged
public class NewsListView {
}
4

2 に答える 2

5

CDI 拡張機能とプロデューサーを混在させているようです。まず、プロデューサーが必要な場合、ファクトリ メソッドはNewsListViewジェネリック型ではなく を返す必要があります。@Producer修飾子アノテーションと一緒に使用すると、アノテーション付きの型にバインドされます。NewsListViewしたがって、注釈を付ける必要はありません@FXMLManagedNewsListView次に、Bean にどこかに注入します。

ビューの作成:

public class FXMLManagedProducer {
    @Produces @FXMLManaged
    public NewsListView getFXMLManagedInstance() {
        return new NewsListView();
    }
}

プロデューサーの使用:

public class SomeBean {
    @Inject @FXMLManaged
    NewsListView view;
}

しかし、私の推測では、これはあなたが探しているものではありません。CDI拡張機能を作成したいと思うかもしれません

public class YourExtension implements Extension {

    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
        if(pat.getAnnotatedType().isAnnotationPresent(FXMLManaged.class)) {
            // do your stuff here
        }
    } 
}

このようにして、注釈付きのNewsListView. 必要に応じて、Bean を作成して依存関係を注入できるように、ライフサイクルにフックする他の方法を確認することもできます。

于 2013-08-06T09:49:25.373 に答える
1

まず、CDI を使用するための Weld-Container を作成する必要があります。ここではいくつかの例を示します。

http://java.dzone.com/articles/fxml-javafx-powered-cdi-jboss http://blog.matthieu.brouillard.fr/2012/08/fxml-javafx-powered-by-cdi-jboss-weld_6 .html

開発中の JavaFX 用の進行中の CDI API があります。これは DataFX の一部になります。ここでいくつかのニュースを見つけることができます:

http://www.guigarage.com/2013/05/designing-javafx-business-applications-part-2/

于 2013-08-06T11:16:45.713 に答える