gpt4 book ai didi

java - @Produce 方法的正确使用方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:48:34 26 4
gpt4 key购买 nike

我正在尝试结合使用 CDI (weld-se 2) 和 JavaFX,并且我想使用自定义创建的注释来注释我的 Controller 类,以便使用我的工厂方法管理此类创建。我想应该如下所示,但这段代码不起作用。您能否建议应该更改哪些内容?

注释:

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

Controller 类:

@FXMLManaged
public class NewsListView {
}

最佳答案

您似乎将 CDI Extensions 与生产者混合在一起。首先,如果你想有一个生产者,工厂方法应该返回一个 NewsListView,而不是一个泛型类型。将 @Producer 与限定符注释一起使用将与注释类型绑定(bind)。所以不需要用@FXMLManaged注解NewsListView。然后将 NewsListView 注入(inject) bean 中的某处。

生成 View :

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

使用生产者:

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

但我猜这不是您要找的。我想你可能想创建一个 CDI Extension

public class YourExtension implements Extension {

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

这样您就可以处理带注释的 NewsListView。您可能想看看其他挂接到生命周期的方法,这样您就可以创建 bean 并在必要时注入(inject)依赖项。

关于java - @Produce 方法的正确使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18060554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com