Jakarta ee 我无法使用@Inject和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

我正在尝试使用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");  
    }   
}
下面是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?