我正在尝试使用 Vaadin-cdi 注入(inject)我的组件和 Bean。请注意,下面的代码已稍微简化。
@Theme("valo")
@CDIUI("")
public class MyUI extends UI {
@Inject
private CDIViewProvider provider;
@Override
protected void init(VaadinRequest request) {
Navigator navigator = new Navigator();
navigator.addProvider(provider);
navigator.navigateTo("mypanel");
}
}
MyPanel 如下:
@CDIView("mypanel")
public class MyPanel extends com.vaadin.ui.Panel implements View {
@Inject
private MySubPanel mySubPanel;
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
FormLayout layout = new FormLayout();
layout.addComponent(mySubPanel);
this.setContent(layout);
}
}
这是 MySubPanel 类:
@UIScoped
public class MySubPanel extends Panel {
@Inject
private MyBean myBean;
public MySubPanel() {
myBean.createSomething("Something"); // throws NullPointerException
}
}
最后是 MyBean 类:
@Stateless
@Default
public class MyBean implements Serializable {
private String something;
public void createSomething(String something) {
this.something = something;
}
}
那么为什么我的 MySubPanel
中的 bean 没有被注入(inject)呢?
我有一个空的 beans.xml
并且我正在使用 WildFly 8.1。
最佳答案
在构造函数中类变量尚未注入(inject)。该bean将在初始化后注入(inject),因此在构造函数中它为null。你有两种可能性。
- 在构造函数中注入(inject) Bean。
- 在带有@PostConstruct注释的init方法中使用bean
我推荐第二种方法。在这里您可以找到有关不同注入(inject)方法的更多信息:http://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.html
关于jakarta-ee - 我无法使用 @Inject 和 Vaadin CDI 实例化我的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30995813/