Jakarta ee 我无法使用@Inject和Vaadin CDI实例化我的bean
我正在尝试使用Vaadin cdi注入我的组件和bean。注意,下面的代码稍微简化了一点Jakarta ee 我无法使用@Inject和Vaadin CDI实例化我的bean,jakarta-ee,vaadin,cdi,vaadin7,Jakarta Ee,Vaadin,Cdi,Vaadin7,我正在尝试使用Vaadin cdi注入我的组件和bean。注意,下面的代码稍微简化了一点 @Theme("valo") @CDIUI("") public class MyUI extends UI { @Inject private CDIViewProvider provider; @Override protected void init(VaadinRequest request) { Navigator navigator = new
@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;
}
}
那么为什么我的bean不在MySubPanel
中注入呢
我有一个空的
beans.xml
,我正在使用WildFly 8.1。构造函数类中的变量尚未注入。bean将在初始化后被注入,因此它在构造函数中为null。你有两种可能
- 将bean注入构造函数中
- 在用@PostConstruct注释的init方法中使用bean
我推荐第二种方法。在这里,您将发现更多关于不同注入方法的信息:您是否厌倦了@EJB而不是@Inject?