Sla*_*lam 3 java cdi jboss-weld javafx-2
我正在尝试将CDI(weld-se 2)和JavaFX结合起来,我想用自定义创建的注释来注释我的控制器类,因此使用我的工厂方法来管理这个类创建.我想这应该如下所示,但这段代码不起作用.你能告诉我应该改变什么吗?
注解:
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE })
@Qualifier
public @interface FXMLManaged {
}
Run Code Online (Sandbox Code Playgroud)
工厂类:
public class FXMLManagedProducer {
@Produces @FXMLManaged
public <T> T getFXMLManagedInstance(Class<T> type) {
return type.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
控制器类:
@FXMLManaged
public class NewsListView {
}
Run Code Online (Sandbox Code Playgroud)
您似乎将CDI Extensions与生产者混合在一起.首先,如果您想拥有一个生产者,那么工厂方法应该返回一个NewsListView而不是泛型类型.使用@Producer连同预选赛注释将与注释类型进行绑定.所以,没有必要标注NewsListView有@FXMLManaged.然后你将你的NewsListView某个地方注入一个豆子里.
制作视图:
public class FXMLManagedProducer {
@Produces @FXMLManaged
public NewsListView getFXMLManagedInstance() {
return new NewsListView();
}
}
Run Code Online (Sandbox Code Playgroud)
使用制作人:
public class SomeBean {
@Inject @FXMLManaged
NewsListView view;
}
Run Code Online (Sandbox Code Playgroud)
但我的猜测是,这不是你想要的.我想你可能想要创建一个CDI扩展
public class YourExtension implements Extension {
<T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
if(pat.getAnnotatedType().isAnnotationPresent(FXMLManaged.class)) {
// do your stuff here
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以处理注释了NewsListView.您可能希望了解其他方法以挂钩生命周期,因此您可以创建bean并在必要时注入依赖项.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |