Java 注射问题(使用vaadin)

Java 注射问题(使用vaadin),java,dependency-injection,ejb,vaadin7,Java,Dependency Injection,Ejb,Vaadin7,我是EJB和注入的新手 我目前正在使用带有CDI的Vaadin框架 我一直在尝试注射,但我没有做到这一点 在我的VaadinUI类中,我尝试了 CDIUI("") @SuppressWarnings("serial") public class MyVaadinUI extends UI { @EJB UserController userController; @Override protected void init(VaadinRequest request) { System

我是EJB和注入的新手

我目前正在使用带有CDI的Vaadin框架

我一直在尝试注射,但我没有做到这一点

在我的VaadinUI类中,我尝试了

CDIUI("")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {


@EJB
UserController userController;

@Override
protected void init(VaadinRequest request) {

  System.err.println("desde controller "+userController.getAll().size());

}
}

用户控制器

@Stateless
public class UserController {

    @EJB
    IUserDAO userDao;

   public List<User> getAll() {

        return userDao.findAll();
    }


}
有人能解释为什么吗

谢谢


Nicolas

只有在注入对象中才会注入其依赖项。如果使用
new
all字段创建一个具有
@inject
的对象,
@ejb
@resource
将不会被注入。 在您的情况下,您可以像这样创建UserController:

UserController userController = new UserController();
所以这个字段不会被注入:

@EJB
IUserDAO userDao;
因此,
getAll()
将抛出NullPointerException

我在项目中使用vaadin和cdi。我建议几乎所有的东西都使用注射剂,或者根本不用。我注入我的UI、视图、自己的组件。。。(并且不要使用new创建它们)这样就可以将ejbbean或其他东西注入到它们中。如果您只是在某些时候使用它,那么最终将是注入和普通对象创建的混合,并且必须将注入的对象传递给您自己实例化的其他对象。在我的另一个项目中,这种情况发生了,并且在以后的代码更改中遇到了问题

@EJB
IUserDAO userDao;