我无法使用 @Inject 和 Vaadin CDI 实例化我的 bean
I cannot instantiate my bean using @Inject and Vaadin CDI
我正在尝试使用 Vaadin-cdi 注入我的组件和 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");
}
}
这里是我的面板:
@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 class:
@UIScoped
public class MySubPanel extends Panel {
@Inject
private MyBean myBean;
public MySubPanel() {
myBean.createSomething("Something"); // throws NullPointerException
}
}
最后是 MyBean class:
@Stateless
@Default
public class MyBean implements Serializable {
private String something;
public void createSomething(String something) {
this.something = something;
}
}
那么为什么我的 MySubPanel
中的 bean 没有被注入?
我有一个空 beans.xml
,我正在使用 WildFly 8.1。
在构造函数中 class 变量尚未注入。该bean 将在初始化后注入,因此在构造函数中为null。你有2种可能。
- 在构造函数中注入bean。
- 在用 @PostConstruct 注释的 init 方法中使用 bean
我推荐第二种方法。在这里您可以找到更多关于不同注入方法的信息:http://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.html
我正在尝试使用 Vaadin-cdi 注入我的组件和 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");
}
}
这里是我的面板:
@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 class:
@UIScoped
public class MySubPanel extends Panel {
@Inject
private MyBean myBean;
public MySubPanel() {
myBean.createSomething("Something"); // throws NullPointerException
}
}
最后是 MyBean class:
@Stateless
@Default
public class MyBean implements Serializable {
private String something;
public void createSomething(String something) {
this.something = something;
}
}
那么为什么我的 MySubPanel
中的 bean 没有被注入?
我有一个空 beans.xml
,我正在使用 WildFly 8.1。
在构造函数中 class 变量尚未注入。该bean 将在初始化后注入,因此在构造函数中为null。你有2种可能。
- 在构造函数中注入bean。
- 在用 @PostConstruct 注释的 init 方法中使用 bean
我推荐第二种方法。在这里您可以找到更多关于不同注入方法的信息:http://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.html